【人工智能概论】 代码运行耗时计算、使用GPU训练网络、元素是Tensor的List转化成Tensor、model.train()与model.eval()

【人工智能概论】 代码运行耗时计算、使用GPU训练网络、元素是Tensor的List转化成Tensor、model.train()与model.eval()


一. 代码运行耗时计算

import time
import math

def time_duration(start):
    s = time.time() - start
    m = math.floor(s/60)
    s -= m * 60
    return '%d分%d秒' %(m,s)

start = time.time()

print("hello world")

print('本轮训练时长:',time_duration(start))

二. 使用GPU训练网络

  • 利用PyTorch调用GPU训练网络是间容易的事,只需要把模型(model)、数据(data)送入到GPU中即可。
  • 代码举例:
# 1.创建模型
model = Net()
# 2.定义device
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 3.将模型加载到GPU(所定义的device) 
model.to(device)
# 4.将输入和输出加载到GPU
for data in train_dataloader:
	inputs, target = data
	inputs, target = inputs.to(device), target.to(device)
  • 实操下来,训练某个网络160轮,用CPU耗时20分29秒,用GPU耗时3分56秒,可见效果还是十分明显的。

三. 元素是Tensor的List转化成Tensor

  • 普通List转化成Tensor,很简单如下即可。
a = [1, 2, 3]
b = torch.tensor(a)
  • 但对于包含了tensor的List,还用以上的办法就会报错,可以通过torch.stack进行转换,如下。
a = torch.rand((2, 3))
a_list = [a for _ in range(3)]
A = torch.stack(a_list)

四. model.train()与model.eval()

  • PyTorch提供了两种方式来切换训练和评估(推断)模式,分别是:model.train() 和 model.eval()。
  • 一般用法是:在训练开始之前写上model.trian() ,在测试时写上model.eval() 。
  • 在训练程序上方添加model.train(),作用是启用 batch normalization 和 dropout ,以保证BN层能够用到每一批数据的均值和方差,Dropout能随机忽略一部分网络连接来训练更新参数。
  • 在推断程序上方添加model.eval() ,作用是不启用 Batch Normalization 和 Dropout,以保证BN层的均值和方差不变,Dropout失效,即利用到所有网络连接,不进行随机舍弃神经元。

猜你喜欢

转载自blog.csdn.net/qq_44928822/article/details/130551617