赞
踩
错误:
RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same
RuntimeError:输入类型(torch.FloatTensor
)和权重类型(torch.cuda.FloatTensor
)应该相同,或者输入应该是一个MKLDNN张量,而权重是一个密集张量。
问题原因:
错误内容就在类型不匹配,根据报错内容可以看出Input type(输入的数据)为torch.FloatTensor(CPU数据类型),而weight type(即网络权重参数这些)为torch.cuda.FloatTensor(GPU数据类型)。
对Inputs进行转换。
inputs为输入数据进行实例化的表示
- device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
- print(torch.cuda.is_available())
-
- inputs = inputs.to(device) #1, 通过to(device)方法
- inputs = inputs.cuda() #2,通过直接指定输入cuda类型
若与上面错误是反的,即 RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same
那就同理,对net进行转换。
net为神经网络进行实例化的表示
- net = Unet()
- device = torch.device('cuda:0')
- net= net.to(device)
- net = net.cuda()
-
-
把所有的网络层(只要有参数需要训练的网络层)都放到 __init__()
函数里面去定义,只在 forward()
中写运行时的逻辑,即:
- class A(nn.Module):
- def __init__(self):
- super(A,self).__init__()
- self.conv = nn.Conv2d(in_channels=3, out_channels=8, kernel_size=3)
- self.relu = nn.ReLU(inplace=True)
- self.b_module = B()
-
- def forward(self,x):
- out = self.conv(x)
- out = self.relu(out)
- out = self.b_module(out)
- return out
-
- class B(nn.Module):
- def __init__(self):
- super(B,self).__init__()
- self.conv = nn.Conv2d(in_channels=8, out_channels=16, kernel_size=3)
- self.relu = nn.ReLU(inplace=True)
-
- def forward(self, x):
- out = self.conv(x)
- out = self.relu(out)
- return out
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。