注:训练过程常会出现上述方法,本文只是简单介绍他们的含义和作用,深层理解请跳至文档,或者 GIthub 查看源码,又或者网盘 ,提取码:pjrs,把下载好的 PyTorch 文档导入,则可以离线查看文档了,希望能帮到你。步入正文:

PyTorch 深度学习框架在训练时,大多都是利用 GPU 来提高训练速度,怎么用 GPU(方法:.cuda ()):

import DataSet
from model.MyNet import MyNet
from torch.utils.data import DataLoader
train_dataset = DataSet() # 自己定义的数据类
train_loader = DataLoader(train_dataset,...) # 用 DataLoader 封装数据
model = MyNet() # 自己定义的网络类
model.cuda()
########################## 关键处 start ##############################
for idx,(img,label) in enumerate(train_loader):
	img = img.cuda()       # .cuda () 将数据和模型送入 GPU 中
	label = label.cuda() 
	output = model(img)
	show(output)			# 对 output 进行操作,如显示 output
########################## 关键处 end ###############################

我们可以发现,当我们需要对 output 进行进一步运算时,该运算会被记录在计算图中,从而计算梯度,为反向传播做准备。但事实上,我们只是想要显示他,不需要 output 进行反传,此时,detach () 方法出现了

  • 作用:阻断反向传播的。
  • 返回值:Tensor,且经过 detach () 方法后,变量仍然在 GPU 上
output= output.detach() # 阻断反传

问题来了:此时 output 仍然在显存中,而内存操作可能会找不到该变量,也就是说,show (output) 是没办法进行操作的。那么 cpu () 出现了

  • 作用:将数据移至 CPU 中
  • 返回值:Tensor
output = output.detach().cpu() # 移至 cpu 返回值是 cpu 上的 Tensor

后续,则可以对该 Tensor 数据进行一系列操作,其中包括 numpy ()该方法主要用于将 cpu 上的 tensor 转为 numpy 数据。

  • 作用:tensor 变量转 numpy
  • 返回值:numpy.array ()
output = output.detach().cpu().numpy()  # 返回值为 numpy.array ()

关于 item ():
图 1
可以发现,item () 可以获取 torch.Tensor 的值。返回值为 float 类型,如上图所示。至此,已完成简单介绍。