pytorch训练的三个小问题

举报
irrational 发表于 2022/07/08 00:49:48 2022/07/08
【摘要】 问题一:loss.data[0] 使用python pytorch框架出现问题: IndexError: invalid index of a 0-dim tensor. Use tensor.ite...

问题一: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.pklPyTorch模型文件,这几种模型文件在格式上有什么区别吗?


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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。