Python RuntimeError:应为标量类型Long的对象,但参数#2';mat2和x27;如何修复它?

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是如何建立类型的,以及如何防止和修复这样的错误吗??

错误:

第49行,在预测中=netSECOND(netFIRST(x))

第1371行,线性;输出=输入.matmul(weight.t())

RuntimeError:标量类型的对象应为Long,但得到标量类型 参数#2'mat2'的浮点值

我真的不知道我做错了什么。我试着用各种可能的方式把一切都变成一个
Long
。我真的不明白pytorch的打字方式。上次我尝试了一个只有一层的东西,它迫使我使用type
int
。 有人能解释一下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()