PyTorch学习(一)

PyTorch学习(一)

因为实验室整体环境的原因,安装的pytorch版本为0.3.1,而0.4及以上已经做出了比较大的改变,比如:
1.0.4中使用设备:.to(device)
2.0.4中删除了Variable,直接tensor就可以
3.with torch.no_grad():的使用代替volatile
尤其是针对于Variable和tensor的转换,对于新手来说真的是深陷其中费时费力,下面简述一下我经常遇到的几个常见的问题:
  1. AttributeError: ‘Variable’ object has no attribute ‘***’
    例:想保存loss的输出结果在列表loss_dict中,如何直接用下述语句的话会出现如下错误
`       print('Epoch: ', epoch + 1, '| train loss: %.4f' % loss.cuda())
        loss_dict.append(loss.item())`
    AttributeError: 'Variable' object has no attribute 'item'
    此时需要添加一行:loss = loss.cpu().data.numpy(),如下,
        print('Epoch: ', epoch + 1, '| train loss: %.4f' % loss.cuda())
        loss = loss.cpu().data.numpy()
        loss_dict.append(loss.item())

此时可以输出他的数据类型看需要怎样的数据再改,可以

print(loss)

出现cuda().FloatTensor()等样式,而append()方法只能用与Numpy数组中,因此要先变成cpu()形式的,再变成numpy数组,因为神经网络中都是以tensor形式进行数据传递的。
2. 可视化损失的变换过程
首先定义一个列表

loss_dict = []

然后在训练过程中loss更新后写入:

        loss = loss.cpu().data.numpy()
        loss_dict.append(loss.item())

然后可视化

plt.plot(loss_dict, label='loss for every epoch')
plt.legend()
plt.show()
  1. 错误:‘dice_loss’ object has no attribute ‘backward’
    此处涉及到损失函数的调用
criterion=dice_loss().cuda()#使用自定义的损失函数
criterion=nn.CrossEntropyLoss()#使用nn中自带的损失函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值