Pytorch更新到0.4后,有一些比较重大的更新,也开始支持Windows系统,可以说是许多人的福音了。

而原先0.2 0.3版本的代码需要稍微修改一下才能继续用

主要变化

1.Variable并入Tensor

无需再import torch.autograd.Variable,Tensor直接可以计算梯度

(当然使用继续使用Variable并没有关系,用法功能都同往常,除了返回对象变成了Tensor类型)

requires_grad等属性也并入tensor
>>> x = torch.ones(1) # 创建一个tensor时默认 requires_grad=False >>> x.requires_grad
False # 可以使用 tensor.requeires_grad_() 来改变该标记(缺省为True) >>>
existing_tensor.requires_grad_() >>> existing_tensor.requires_grad True # 实际例子
# 老版本 v0.3 for step, data in enumerate(data_loader, 1): x, y = data x =
Variable(x) y = Variable(y) # 新版本 v0.4 for step, data in enumerate(data_loader,
1): x, y = data # 这样就ok了
2.type()的更变

Tensor的type()不再反映数据类型。而是使用isinstance()或x.type()替代
>>> x = torch.DoubleTensor([1, 1, 1]) >>> print(type(x)) # 曾是
torch.DoubleTensor <class 'torch.autograd.variable.Variable'> >>>
print(x.type()) # 可用: 'torch.DoubleTensor' 'torch.DoubleTensor' >>>
print(isinstance(x, torch.DoubleTensor)) # 可用: True True
3.取数值 .data改为.detach()

.data原本是用于从Variable中获取所包装的Tensor。

合并之后,.data依旧能用与获取数据,但不能被用于计算梯度,某些情况下会导致出错。所以按照官方推荐用.detach()替代
# 前向传播 v0.3 output = model(x) pred = torch.max(output.data, 1)[1] # 前向传播 v0.4
output = model(x) pred = torch.max(output.detach(), 1)[1]
4.累加损失时.data[0]改为.item()

以广泛使用的total_loss += loss.data[0]为例。

0.4.0之前,loss是一个封装了(1,)Tensor的Variable,但0.4.0的loss现在是一个零维的标量。

索引到标量是没有意义的(现在它会给出一个警告,但在0.5.0中将是一个系统错误)。

使用loss.item()可以从标量中获取Python数字。
running_loss += loss.data[0] # 老版本 running_loss += loss.item() # 0.4版本
5.弃用volatile

测试过程中,用with torch.no_grad():来代替
with torch.no_grad(): print('Testing...') for step, data in
enumerate(test_loader, 1): ......
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信