草庐IT

torch中常见的错误信息

小白小王 2023-05-07 原文

运行代码过程中,遇到的一些问题,今天汇总了一些,希望可以帮助大家,解决一些类似的错误问题。

1.报错信息:RuntimeError: mat1 dim 1 must match mat2 dim 0

错误原因:全连接层 前网络结构 的输出 与全连接层的输入层维度不符合,如下列错误所示:

self.fc1 = nn.Linear(124, 121)
self.fc2 = nn.Linear(120, 81)

解决方案:print下 全连接层前网络结构 的输出 将其输出与全连接层输入层相对应。

假设forward中要依次执行fc1和fc2,fc1的out_features 等于fc2的in_features就不会有错误,这里都是120不会有错误,修改后,如下所示:

self.fc1 = nn.Linear(124, 120)
self.fc2 = nn.Linear(120, 81)

扩展:nn.Linear()

in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。
out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数。

2.报错信息:IndexError: Dimension out of range (expected to be in range of [-2, 1], but got 2)

报错原因:问题出在维度上,因为少了一个维度,输入的是二维的,而人家需要的是三维的。

解决方案:

a.数据进行reshape

data = data.reshape(height, weight, 1)
#从二维增加到三维

b.或者使用unsqueeze()函数

data = data.unsqueeze(1)
#在第二维增加一维

扩展: unsqueeze()函数是对数据维数进行扩展,squeeze()函数是对数据维数进行压缩,但是两个函数只能对一的维度进行扩展或压缩处理,括号数字为几,就是指定数据data的的第几维数 进行维度为1的处理。

3.报错信息:AttributeError: 'Tensor' object has no attribute 'gpu' 或者TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    在使用GPU进行神经网络的训练或者进一步操作时,会遇到AttributeError: 'Tensor' object has no attribute 'gpu' 或者TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.这样的问题。

报错原因:在我们想把 GPU tensor 转换成 Numpy 变量的时候,需要先将 tensor 转换到 CPU 去,因为 Numpy 是 CPU的only 专属。

解决方案:把报错代码中的所有gpu改为cpu,如下列所示:

改之前:

loss_list.append(loss.data.gpu().numpy())
y_pred = np.argmax(y_pred_prob.data.gpu().numpy(), axis=1)
batch_accu = np.sum(y_pred == y.data.gpu().numpy(), dtype=np.float32) / y_pred.shape[0]

改之后:

loss_list.append(loss.data.cpu().numpy())
y_pred = np.argmax(y_pred_prob.data.cpu().numpy(), axis=1)
batch_accu = np.sum(y_pred == y.data.cpu().numpy(), dtype=np.float32) / y_pred.shape[0]

3.报错信息:IndexError: scatter_(): Expected dtype int64 for index.

报错原因:
scatter要求数据是int64类型,而我在定义tensor时写的是torch.Tensor(x),应该写成torch.LongTensor(x),指定为int64类型。

解决方案:找到原数据的定义方式,一般在dtype=np.int64;dtype=np.float32中(多数定义函数都有dtype属性最好int和float的位数要一致torch.from_numpy()产生的tensor类型为int32,因此需要用data = torch.tensor(data,dtype = torch.int64)进行数据类型的转换

data = torch.tensor(data,dtype = torch.int64)

4.报错信息:TypeError: expected np.ndarray (got int)

解决方案:出现此错误时将torch.from_numpy()改为torch.Tensor()即可

5.报错信息:RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'target'

报错原因:是关于label的错误。修改办法总结一下:
1、RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'target',在这个报错中,标红的地方是关键,找到程序中的label,比如说在loss处,如下所示:

解决方案:改变下标签的数据类型

修改前:

Loss = torch.nn.CrossEntropyLoss()
loss = Loss(out, label)

修改后:

Loss = torch.nn.CrossEntropyLoss()
loss = Loss(out, label.long())

补充:多次报这个错误后发现,它说是什么类型,直接在label后面加上对应的类型即可。

6.报错信息:AttributeError: 'xx' object has no attribute xx

报错原因:报错所在的地方可能多空了一格。

解决方案:按“TAB"+"SHIFT" 删除空格。

修改前:

class MyLed(QAbstractButton):
    def __init__(self, parent=None):
        super(MyLed, self).__init__(parent)
        self.initUI()

        def initUI(self):
            self.setMinimumSize(24, 24)
            self.setCheckable(True)
            self.scaledSize = 1000.0    #为方便计算,将窗口短边值映射为1000
            self.setLedDefaultOption()

    def setLedDefaultOption(self):
        for attr, val in zip(allAttributes, allDefaultVal):
            setattr(self, attr, val)
        self.update()

修改后:

class MyLed(QAbstractButton):
    def __init__(self, parent=None):
        super(MyLed, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.setMinimumSize(24, 24)
        self.setCheckable(True)
        self.scaledSize = 1000.0    #为方便计算,将窗口短边值映射为1000
        self.setLedDefaultOption()

    def setLedDefaultOption(self):
        for attr, val in zip(allAttributes, allDefaultVal):
            setattr(self, attr, val)
        self.update()

有关torch中常见的错误信息的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  4. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  5. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  6. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  7. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  8. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  9. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  10. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

随机推荐