RuntimeError:标量类型为Long的预期对象,但参数#2'mat2'的标量类型为Float,如何解决?

时间:2019-09-29 17:20:38

标签: python neural-network pytorch typing


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()

错误:

  

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

     

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

     

RuntimeError:标量类型的预期对象长,但得到了标量类型   浮动为参数2“ mat2”

我真的看不到我在做什么错。我试图以各种可能的方式将所有内容都放在Long中。我真的不知道pytorch的打字方式。上次我尝试仅使用一层的东西时,它迫使我使用类型int。 有人可以解释如何在pytorch中建立类型,以及如何防止和修复此类错误吗? 我要说的是非常感谢,这个问题确实困扰着我,无论我尝试什么,我似乎都无法解决。

1 个答案:

答案 0 :(得分:1)

权重为浮点,输入为多头。这是不允许的。实际上,除了神经网络中的Floats之外,我认为炬不能提供任何支持。

如果您删除对long的 all 调用,并将您的输入定义为浮点数,那么它将起作用(我尝试过)。

(然后您将得到另一个不相关的错误:您需要对损失进行总计)