NN简单例子中的pytorch Crossentropy错误

pytorch Crossentropy error in simple example of NN

H1,我正在尝试制作满足简单公式的NN模型。
y = X1^2 + X2^2

但是当我使用 CrossEntropyLoss 作为损失函数时,我收到两条不同的错误消息。
首先,当我像这样设置代码时

x = torch.randn(batch_size, 2)
y_hat = model(x)
y = answer(x).long()

optimizer.zero_grad()
loss = loss_func(y_hat, y)
loss.backward()
optimizer.step()

我收到这条消息

RuntimeError: Assertion `cur_target >= 0 && cur_target < n_classes' failed.  at 
c:\programdata\miniconda3\conda-bld\pytorch_1533090623466\work\aten\src\thnn\generic/Cl 

assNLLCriterion.c:93

其次,我这样改代码

x = torch.randn(batch_size, 2)
y_hat = model(x)
y = answer(x).long().view(batch_size,1,1)

optimizer.zero_grad()
loss = loss_func(y_hat, y)
loss.backward()
optimizer.step()

然后我收到这样的消息

RuntimeError: multi-target not supported at c:\programdata\miniconda3\conda-bld\pytorch_1533090623466\work\aten\src\thnn\generic/ClassNLLCriterion.c:21

我该如何解决这个问题?谢谢。(对不起我的英语)
这是我的代码

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F

def answer(x):

    y = x[:,0].pow(2) + x[:,1].pow(2)

    return y

class Model(nn.Module):

    def __init__(self, input_size, output_size):
        super(Model, self).__init__()

        self.linear1 = nn.Linear(input_size, 10)
        self.linear2 = nn.Linear(10, 1)

    def forward(self, x):

        y = F.relu(self.linear1(x))
        y = F.relu(self.linear2(y))

        return y

model = Model(2,1)
print(model, '\n')

loss_func = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr = 0.001)

batch_size = 3
epoch_n = 100
iter_n = 100

for epoch in range(epoch_n):
    loss_avg = 0

    for i in range(iter_n):

        x = torch.randn(batch_size, 2)
        y_hat = model(x)
        y = answer(x).long().view(batch_size,1,1)

        optimizer.zero_grad()
        loss = loss_func(y_hat, y)
        loss.backward()
        optimizer.step()

        loss_avg += loss

    loss_avg = loss_avg / iter_n

    if epoch % 10 == 0:
        print(loss_avg)

    if loss_avg < 0.001:
        break

我可以在 pytorch 中使用数据加载器制作这些数据集吗?感谢您的帮助。

您使用了错误的损失函数。 CrossEntropyLoss 通常用于分类问题,而您的问题是回归问题。所以你应该使用像 Mean Squared Error Loss, L1 Loss etc. Take a look at this, this, this and this.

这样的回归任务的损失