TypeError: cross_entropy_loss(): argument ‘input’ (position 1) must be Tensor, not Linear

TypeError: cross_entropy_loss(): argument ‘input’ (position 1) must be Tensor, not Linear

我正在观看一个 youtube 视频并学习制作一个聊天机器人,老师解释了这一步来制作训练模型,为老师编译的代码非常完美,但我遇到了错误。我做错了什么?

for epoch in range(num_epochs):
    for (words, labels) in train_loader:
        words = words.to(device)
        labels = labels.to(device, dtype=torch.int64)

        outputs= model(words)
        loss = criterion(outputs,labels)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    if(epoch +1) % 100 == 0:
        print(f'epoch {epoch+1}/{epoch}, loss = {loss.item():.4f}')

print(f'epoch {epoch+1}/{epoch}, loss = {loss.item():.4f}')

神经网络:

class NeuralNet(nn.Module):
    def __init__(self,input_size, hidden_size,num_classes):
        super(NeuralNet,self).__init__()
        self.l1 = nn.Linear(input_size,hidden_size)
        self.l2 = nn.Linear(hidden_size,hidden_size)
        self.l3 = nn.Linear(hidden_size,num_classes)
        self.relu = nn.ReLU()

    def forward(self,x):
        out = self.l1(x)
        out = self.relu(out)
        out = self.l2(out)
        out = self.relu(out)
        out = self.l3
        return out

问题出在行中的 NeuralNet 代码:

out = self.l3

您设置为线性层,而不是调用数据上的线性层。改成 out = self.l3(out) 它将起作用