在pytorch中使用交叉熵损失时,应该使用softmax作为输出吗?

我 为 2个隐藏层对完全连接的深度神经网络进行分类时遇到问题。

我想在两个隐藏层中都使用 作为激活,但是最后,我应该使用 。

对于损失,我选择nn.CrossEntropyLoss()在PyTOrch中使用(我发现),它不希望将一键编码的标签作为真实标签,而希望使用LongTensor类。

我的模型是nn.Sequential(),当我最终使用softmax时,就测试数据的准确性而言,这给我带来了更糟糕的结果。为什么?

import torch

from torch import nn

inputs, n_hidden0, n_hidden1, out = 784, 128, 64, 10

n_epochs = 500

model = nn.Sequential(

nn.Linear(inputs, n_hidden0, bias=True),

nn.Tanh(),

nn.Linear(n_hidden0, n_hidden1, bias=True),

nn.Tanh(),

nn.Linear(n_hidden1, out, bias=True),

nn.Softmax() # SHOULD THIS BE THERE?

)

criterion = nn.CrossEntropyLoss()

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.5)

for epoch in range(n_epochs):

y_pred = model(X_train)

loss = criterion(y_pred, Y_train)

print('epoch: ', epoch+1,' loss: ', loss.item())

optimizer.zero_grad()

loss.backward()

optimizer.step()

回答:

torch.nn.CrossEntropyLoss()文档中所述:

这一标准联合收割机nn.LogSoftmax(),并nn.NLLLoss()在一个单独的类。

因此,你应该 使用前SOFTMAX。

以上是 在pytorch中使用交叉熵损失时,应该使用softmax作为输出吗? 的全部内容, 来源链接: utcz.com/qa/398464.html

回到顶部