MNIST, обученный с Sigmoid, терпит неудачу, в то время как Softmax работает отлично
Я пытаюсь выяснить, как различная активация влияет на конечные результаты, поэтому я реализовал простую сеть для MNIST с PyTorch.
Я использую NLLLoss (отрицательное логарифмическое правдоподобие), так как он реализует Cross Entropy Loss при использовании с softmax.
Когда у меня есть softmax в качестве активации последнего слоя, он прекрасно работает.
Но когда я вместо этого использовал сигмоид, я заметил, что все разваливается
Вот мой сетевой код
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.
Есть ли какая-то деталь, которую я здесь не улавливаю?