Pytorch出现RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor)

https://www.lizenghai.com/archives/41780.html

最近开始学习pytorch,在训练时出现标题所示问题。浏览了很多方法后,总结出出现这个问题的主要原因是输入的数据类型与网络参数的类型不符。

Input type为torch.cuda.FloatTensor(GPU数据类型), weight type(即net.parameters)为torch.FloatTensor(CPU数据类型)

网上资料大多数的解决方法是 将网络放到GPU上。有以下两种方法

方法一

device = torch.device('cuda:0')
net.to(device)

方法二:

net = net.cuda()

但是上述方法并不适合我碰到的问题,经过试验,最后发现自己搭建的net有一部分没有写入GPU。出现问题的原因是,在搭建net时,在forward函数中两种定义网络的方式不能混用,如下图。


错误写法

解决办法:现将几个网络层在init中定义好


更改后的__init__

然后forward改为:


更改后的forward

问题解决!!!!

https://www.jianshu.com/p/73759cee9e36

==================================================================================

错误代码:

1

2

3

self.model = []

        for i in range(num_modal):

            self.model.append(ResNet50())<br><br>

#############
outs = []
for i in range(x.size(1)):
    outs.append(self.model[i].fusion_forward(x[:, i, :]))

  

正确代码:

1

2

3

4

5

6

7

8

9

self.model = []

for i in range(num_modal):

    self.model.append(ResNet50())

self.models = nn.Sequential(*list([m for m in self.model]))

###########

outs = []

for i in range(x.size(1)):

     outs.append(self.models[i].fusion_forward(x[:, i, :]))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值