Python 神经网络简单例子中的熵误差
H1,我正在尝试制作满足简单公式的NN模型。Python 神经网络简单例子中的熵误差,python,pytorch,loss-function,Python,Pytorch,Loss Function,H1,我正在尝试制作满足简单公式的NN模型。 y=X1^2+X2^2 但当我使用CrossEntropyLoss作为loss函数时,会得到两条不同的错误消息 首先,当我这样设置代码时 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() x = t
y=X1^2+X2^2
但当我使用CrossEntropyLoss作为loss函数时,会得到两条不同的错误消息
首先,当我这样设置代码时
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()
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: Assertion `cur_target >= 0 && cur_target < n_classes' failed. at
c:\programdata\miniconda3\conda-bld\pytorch_1533090623466\work\aten\src\thnn\generic/Cl
然后我会收到类似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
导入火炬
导入torch.nn作为nn
将torch.optim导入为optim
导入torch.nn.功能为F
def答案(x):
y=x[:,0]。功率(2)+x[:,1]。功率(2)
返回y
类模型(nn.Module):
定义初始大小(自身大小、输入大小、输出大小):
超级(模型,自我)。\uuuu初始化
self.linear1=nn.Linear(输入大小,10)
自线性2=nn线性(10,1)
def前进(自身,x):
y=F.relu(自线性1(x))
y=F.relu(自线性2(y))
返回y
模型=模型(2,1)
打印(型号“\n”)
损失函数=nn.CrossEntropyLoss()
optimizer=optim.SGD(model.parameters(),lr=0.001)
批量大小=3
历元n=100
国际热核实验堆n=100
对于范围内的历元(历元):
平均损耗=0
对于范围内的i(iter\n):
x=焊炬randn(批次尺寸,2)
y_hat=型号(x)
y=答案(x).long().视图(批量大小,1,1)
optimizer.zero_grad()
损失=损失函数(y,y)
loss.backward()
optimizer.step()
平均损耗=损耗
平均损耗=平均损耗/iter\n
如果历元%10==0:
打印(平均损耗)
如果损失平均值<0.001:
打破
我可以使用pytorch中的dataloader制作这些数据集吗?谢谢您的帮助。您使用了错误的丢失功能
CrossEntropyLoss
通常用于分类问题,而您的问题是回归问题。因此,您应该使用用于回归的损失,如任务,等等。请看,和。哦,我不知道交叉熵通常可以用于分类。。。。非常感谢你!如果这解决了你的问题,考虑“接受”这个答案,对不起。我忘了!没问题。很高兴我能帮忙。