pytorch训练的三个小问题
问题一:loss.data[0]
使用python pytorch框架出现问题:
IndexError: invalid index of a 0-dim tensor. Use tensor.item()
in Python or tensor.item<T>()
in C++ to convert a 0-dim tensor to a number
修改loss.data[0]为loss.item()
例:
if (i+1) % 100 == 0:
print ('Epoch [%d/%d], Step [%d/%d], Loss: %.4f'
%(epoch+1, num_epochs, i+1, len(train_dataset)//batch_size, loss.data[0]))
- 1
- 2
- 3
修改为
if (i+1) % 100 == 0:
print ('Epoch [%d/%d], Step [%d/%d], Loss: %.4f'
%(epoch+1, num_epochs, i+1, len(train_dataset)//batch_size, loss.item()))
- 1
- 2
- 3
问题二:.pt、.pth、.pkl
PyTorch模型 .pt、.pth与.pkl 的区别
1 项目场景
调试PyTorch
代码保存训练模型的时候有些时候保存的格式是 .pt
,有些时候是.pth
与.pkl
,不禁好奇它们之间的区别。
2 问题描述
我们经常会看到后缀名为.pt
,.pth
,.pkl
的PyTorch
模型文件,这几种模型文件在格式上有什么区别吗?
3 原因分析
它们并不存在格式上的区别,只是后缀名不同而已。在用torch.save()
函数保存模型文件的时候,有些人喜欢用.pt
后缀,有些人喜欢用.pth
或 .pkl
,用相同的 torch.save()
语句保存出来的模型文件没有什么不同。
在PyTorch
官方的文档里,有用.pt
的,也有用.pth
的。
据某些文章的说法,一般惯例是使用 .pth
,但是官方文档里貌似.pt
居多,而且官方也不是很在意固定地用某一种。
另外,为什么会有 .pkl
这种后缀名呢?因为Python
有一个序列化模块 - pickle
,使用它保存模型时,通常会起一个以 .pkl
为后缀名的文件。torch.save()
正是使用pickle
来保存模型的。
参考:https://www.codelast.com/
问题三:有关模型保存与加载
报错
AttributeError: ‘collections.OrderedDict‘ object has no attribute ‘eval‘
- 1
原因
这个错误的原因就是说你这个collecttions的类对象没有eval这个属性。
绝大部分原因是因为使用了下面语句来保存模型。
torch.save(model.state_dict(),model_path)
- 1
但实际上它保存的不是模型文件,而是参数文件文件。在模型文件中,存储完整的模型,而在状态文件中,仅存储参数。因此,collections.OrderedDict只是模型的值。
解决方案
适用下面的语句来保存模型
#保存时
torch.save(model,'save_path')
#加载时
torch.load('save_path/model')
- 1
- 2
- 3
- 4
- 5
参考:csdn.net
文章来源: blog.csdn.net,作者:irrationality,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_54227557/article/details/125646856
- 点赞
- 收藏
- 关注作者
评论(0)