gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:29 25 4
gpt4 key购买 nike

我在为 pytorch 中的 MNIST 数据集 分类具有 2 个隐藏层的完全连接的深度神经网络时遇到问题。

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

对于损失,我在 PyTOrch 中选择 nn.CrossEntropyLoss(),它(正如我发现的那样)不想将单热编码标签作为真实标签,而是采用 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() 中所述文档:

This criterion combines nn.LogSoftmax() and nn.NLLLoss() in one single class.

因此,您之前不应该使用 softmax。

关于python - 在 pytorch 中使用交叉熵损失时,我应该使用 softmax 作为输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com