PyTorch关于以下方法使用:detach() cpu() numpy() 以及item()

注:训练过程常会出现上述方法,本文只是简单介绍他们的含义和作用,深层理解请跳至文档,或者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类型,如上图所示。至此,已完成简单介绍。

  • 91
    点赞
  • 250
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值