【发布时间】:2019-08-23 02:23:08
【问题描述】:
使用 Sigmoid 训练的 MNIST 失败,而 Softmax 工作正常
我正在尝试研究不同的激活如何影响最终结果,因此我使用 PyTorch 为 MNIST 实现了一个简单的网络。
我正在使用 NLLLoss(负对数似然),因为它在与 softmax 一起使用时实现了交叉熵损失。
当我将 softmax 作为最后一层的激活时,效果很好。 但是当我改用 sigmoid 时,我注意到事情崩溃了
这是我的网络代码
def forward(self, x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
x = x.view(-1, 80)
x = F.relu(self.fc1(x))
x = F.dropout(x, training=self.training)
x = self.fc2(x)
return F.XXXX(x)
XXXX 是激活函数
Sigmoid 和 Softmax 的输出值都在 (0, 1) 之间。 是的,Softmax 保证总和为 1,但我不确定这是否回答了 Sigmoid 训练失败的原因。 有什么我没听懂的细节吗?
【问题讨论】:
-
sigmoid 因梯度消失而臭名昭著,这可能会影响您的最终结果
-
请注意,如果只有 2 个类,softmax 实际上会减少到 sigmoid。但是,我无法理解您实际上是如何使用 sigmoid 进行多类分类的。
标签: deep-learning pytorch loss-function multiclass-classification activation-function