python - NN简单示例中的pytorch交叉熵错误

标签 python pytorch loss-function

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 

assNLCriterion.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等等看看this , this , thisthis .

关于python - NN简单示例中的pytorch交叉熵错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571621/

相关文章:

python - Pandas DataFrame 的多列可以被不同的值切片吗

python - PyTorch DataLoader 如何与 PyTorch 数据集交互以转换批处理?

二进制编码(非单热编码)分类数据的 Keras 自定义损失函数

python-3.x - 我的简单损失函数导致 NAN

python - ModuleNotFoundError : No module named 'python_jwt' (Raspberry Pi)

php - 用php调用python脚本(windows xampp服务器)

java - 使用概率估计进行分类的 ML 技术

pytorch - PyTorch 为什么叫 PyTorch?

python - 相对导入的问题

python - 了解 CTC 的 TF 实现如何工作