Python RuntimeError:应为标量类型Long的对象,但参数#2';mat2和x27;如何修复它?
错误: 第49行,在预测中=netSECOND(netFIRST(x)) 第1371行,线性;输出=输入.matmul(weight.t()) RuntimeError:标量类型的对象应为Long,但得到标量类型 参数#2'mat2'的浮点值 我真的不知道我做错了什么。我试着用各种可能的方式把一切都变成一个Python RuntimeError:应为标量类型Long的对象,但参数#2';mat2和x27;如何修复它?,python,neural-network,pytorch,typing,Python,Neural Network,Pytorch,Typing,错误: 第49行,在预测中=netSECOND(netFIRST(x)) 第1371行,线性;输出=输入.matmul(weight.t()) RuntimeError:标量类型的对象应为Long,但得到标量类型 参数#2'mat2'的浮点值 我真的不知道我做错了什么。我试着用各种可能的方式把一切都变成一个Long。我真的不明白pytorch的打字方式。上次我尝试了一个只有一层的东西,它迫使我使用typeint。 有人能解释一下pytorch是如何建立类型的,以及如何防止和修复这样的错误吗??
Long
。我真的不明白pytorch的打字方式。上次我尝试了一个只有一层的东西,它迫使我使用typeint
。
有人能解释一下pytorch是如何建立类型的,以及如何防止和修复这样的错误吗??
很多我的意思是非常感谢,这个问题真的很困扰我,无论我怎么尝试,我似乎都无法解决它。权重是浮动的,输入是长的。这是不允许的。事实上,我不认为torch除了支持神经网络中的浮动之外,还支持其他任何东西 如果您删除对long的所有调用,并将输入定义为float,它就会工作(我尝试过了,它会工作)
(然后,您将得到另一个不相关的错误:您需要计算您的损失)更不用说它是如何工作的了。我需要删除所有的dtype long,然后将dtype改为torch.float,并在loss of Course中求和。非常欢迎。如果答案令人满意,请将其标记为已接受(单击勾号)。
import torch.nn as nn
import torch
import torch.optim as optim
import itertools
class net1(nn.Module):
def __init__(self):
super(net1,self).__init__()
self.pipe = nn.Sequential(
nn.Linear(10,10),
nn.ReLU()
)
def forward(self,x):
return self.pipe(x.long())
class net2(nn.Module):
def __init__(self):
super(net2,self).__init__()
self.pipe = nn.Sequential(
nn.Linear(10,20),
nn.ReLU(),
nn.Linear(20,10)
)
def forward(self,x):
return self.pipe(x.long())
netFIRST = net1()
netSECOND = net2()
learning_rate = 0.001
opt = optim.Adam(itertools.chain(netFIRST.parameters(),netSECOND.parameters()), lr=learning_rate)
epochs = 1000
x = torch.tensor([1,2,3,4,5,6,7,8,9,10],dtype=torch.long)
y = torch.tensor([10,9,8,7,6,5,4,3,2,1],dtype=torch.long)
for epoch in range(epochs):
opt.zero_grad()
prediction = netSECOND(netFIRST(x))
loss = (y.long() - prediction)**2
loss.backward()
print(loss)
print(prediction)
opt.step()