注:训练过程常会出现上述方法,本文只是简单介绍他们的含义和作用,深层理解请跳至文档,或者 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 ():
可以发现,item () 可以获取 torch.Tensor 的值。返回值为 float 类型,如上图所示。至此,已完成简单介绍。