【Runtimeerror】解决张量维度不匹配报错信息

这篇具有很好参考价值的文章主要介绍了【Runtimeerror】解决张量维度不匹配报错信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

在做本科毕业设计时,复现代码:

# ...
# We split the whole train dataset into 100 segments.
        for i in range(20):
            t1 = time.time()
            total_loss = 0
            train_dataset = QD.QDloadStrokeData(no=i,val = False,transforms = trans)          
            train_loader = DataLoader(dataset=train_dataset, batch_size=256,shuffle=False)
            for t, (x,stroke, y) in enumerate(train_loader):
                model.train()  
                x = x.to(device=device, dtype=dtype)  
                y = y.to(device=device, dtype=torch.long)

                #add the center feature returned from resnet 
                scores,cf_pred = model(x)
                
                #Caculate entropy loss
                entropy_loss = F.cross_entropy(scores, y)
                
                #Caculate the center loss 
                center_loss = F.mse_loss(cf_pred,cf_class[y])
                
                loss = entropy_loss + alpha * center_loss
                
                total_loss += loss
# ...

报以下错误:

RuntimeError                              Traceback (most recent call last)
/tmp/ipykernel_14660/27735771.py in <module>
----> 1 train(cnn_model,optimizer, epochs=5,args=args)

/tmp/ipykernel_14660/4015440672.py in train(model, optimizer, epochs, args)
    100 
    101                 #Caculate the center loss
--> 102                 center_loss = F.mse_loss(cf_pred,cf_class[y])
    103                 print(center_loss.shape)
    104 
RuntimeError: The size of tensor a (2048) must match the size of tensor b (2088) at non-singleton dimension 1

报错信息:张量a(2048)与张量b(2088)必须在索引为1的维度上相匹配。

解决方案

这个报警信息没说是哪两个张量的维度不匹配,但是提示了在计算mse_loss的时候出错。

所以没什么好说的,最好的办法就是把中间所有张量的维度全输出出来看看:

另起一段代码,输入一个和原输入维度一样的随机张量查错:

import torch
import torch.nn.functional as F
import numpy as np

cf_class = torch.from_numpy(np.load("center_feature_ssn.npy"))
scores = torch.randn(256,40)
scores = torch.tensor(scores, dtype=torch.float)
cf_pred = torch.randn(256,2048)
print('scores:',scores.shape)
y = torch.zeros(256)
y = y.long()
print('y:',y.shape)
entropy_loss = F.cross_entropy(scores, y)
print('entropy_loss:',entropy_loss.shape)
print('cf_pred:',cf_pred.shape)
print('cf_class[y]:',cf_class[y].shape)
center_loss = F.mse_loss(cf_pred,cf_class[y])

输出:

scores: torch.Size([256, 40])
y: torch.Size([256])
entropy_loss: torch.Size([])
cf_pred: torch.Size([256, 2048])
cf_class[y]: torch.Size([256, 2088])

RuntimeError: The size of tensor a (2048) must match the size of tensor b (2088) at non-singleton dimension 1

到此我们成功复现了错误(doge)。就是cf_pred和cf_class[y]的维度1不匹配,和报错信息出现的数字一样,一个2048一个2088。

弄清楚哪里出了问题,接下来就去找这两个变量的维度是怎么变化的,然后让他俩维度保持一致就可以了。

附:

在执行cross_entropy()的时候还踩了一个坑:

RuntimeError: expected scalar type Long but found Float

这是因为交叉熵损失函数里面要求,target的类型应该是long类型,input类型不做要求。所以在y后面加一句转换类型语句y = y.long()即可。文章来源地址https://www.toymoban.com/news/detail-529680.html

到了这里,关于【Runtimeerror】解决张量维度不匹配报错信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 张量(Tensor)维度尺寸对不齐(Expected size xx but got size xx for tensor)

    本文以 U-Net 举例,演示如何解决 张量(Tensor)维度尺寸对不齐 的问题 U-Net 的网络架构可以参考这篇文章:U-Net原理分析与代码解读 这是本文演示所用的 U-Net代码 : 假设本文输入的图像是 600乘以400像素 的尺寸,那么对于本文U-Net代码所需的 512乘以512像素 的输入是肯定 不匹配

    2024年02月02日
    浏览(55)
  • 矩阵维度不匹配如何处理

    矩阵维度不匹配如何处理 在MATLAB中,矩阵维度不匹配是一个常见的问题。当我们在进行矩阵运算或操作时,如果参与操作的矩阵的维度不一致,就会导致错误。然而,我们可以采取一些方法来解决这个问题,使得矩阵的维度能够匹配,从而顺利进行运算。 方法一:调整矩阵

    2024年02月04日
    浏览(39)
  • RuntimeError: grad can be implicitly created only for scalar outputs的原因:Pytorch不支持对张量的求导

    一、背景介绍 原则上,Pytorch不支持对张量的求导,即如果z是张量的话,需要先将其转为标量。 浏览了很多博客,给出的解决方案都是说在求导时,加一个torch.ones_like(z)的参数。 下面给出一个实例来分析一下torch.ones_like(z)的作用。简而言之, torch.ones_like(z)相当于在对z进行求

    2024年02月14日
    浏览(38)
  • RuntimeError: DataLoader worker is killed by signal: Killed.报错解决

    一、问题描述 使用pytorch进行训练时,训练了仅几个batch后出现报错信息: 这个报错和DataLoader有关,定位到训练脚本中的代码: 二、问题分析 通过设置num_workers,DataLoader实例可以使用多少个子进程进行数据加载,从而加快网络的训练过程。 默认情况下,num_workers值被设置为

    2024年02月12日
    浏览(39)
  • 报错解决:RuntimeError: expected scalar type Long but found Float

    nn.Linear需要作用于浮点数,这里可能输入了整数类型的张量作为参数。 报错: 把a转为float,结果为:

    2024年02月09日
    浏览(45)
  • 人工智能的基石——张量的介绍与应用

    你有没有想过人工智能(AI)算法是如何处理各种非结构化数据的?比如当你输入音频数据,或者让算法处理图像或文本时会发生什么。其实,这并不是什么高深的火箭科学。它只是将这些数据作为张量来处理。 如果你上过一些大学数学或者大学物理课,你应该对张量有所了

    2024年02月19日
    浏览(38)
  • 解决pytorch报错——RuntimeError: Expected to have finished reduction in the prior iteration...

    之前写代码时碰到了这样一个错误: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by (1) passing the keyword argument find_unused_parameters=True to torch.nn.pa

    2023年04月17日
    浏览(48)
  • 【Pytorch报错】RuntimeError:cuDNN error:CUDNN_STATUS_INTERNAL_ERROR 高效理解记录及解决!

    明明跑了一段时间?跑过一次完整的?怎么就出现这个报错呢?代码也未改动?而这就是现实! 观察显卡使用情况,多人共用同一服务器,项目各自运行,会抢占显存,进而报错! 多个项目运行,占用增加,导致内存用完报错,还是很真实的! 文件是否设置了CUDA_VISIBLE_DE

    2024年02月15日
    浏览(48)
  • Stable Diffusion WebUI报错RuntimeError: Torch is not able to use GPU解决办法

    新手在安装玩Stable Diffusion WebUI之后会遇到各种问题, 接下来会慢慢和你讲解如何解决这些问题。 在我们打开Stable Diffusion WebUI时会报错如下: RuntimeError: Torch is not able to use GPU;add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check 提示:Python 运行时抛出了一个异常。请

    2024年02月08日
    浏览(62)
  • Pytorch报错解决——(亲测有效)RuntimeError: Distributed package doesn‘t have NCCL built in

    在我跑SLADD模型的时候,出现了如下报错: 上网搜寻一番后,发现了解决方法 第一步:在本文件的开头机上这样两行代码: 第二步:在本文件代码中找到这样一部分代码: 把 dist.init_process_group(backend=\\\'nccl\\\', init_method=\\\'env://\\\', world_size=args.world_size, rank=rank) 这一行中的nccl换成gl

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包