我无法对pytorch中的 MNIST数据集的具有2个隐藏层的完全连接的深度神经网络进行分类。
我想在两个隐藏层中都使用 tanh 作为激活,但是最后,我应该使用 softmax 。
为了弥补损失,我在pytorch中选择了nn.CrossEntropyLoss()
,(我发现)它不希望将一键编码的标签用作真实标签,而希望使用LongTensor类。
我的模型是nn.Sequential()
,当我最终使用softmax时,就测试数据的准确性而言,它给我带来的结果更糟。为什么?
import torch
import torch.nn as 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()
感谢您的帮助:)
答案 0 :(得分:2)