какая разница, если использовать сигмоид над софтмаксом? (автоэнкодеры, керасы) - PullRequest
0 голосов
/ 28 апреля 2019

Я столкнулся с этой проблемой во время обучения нейронной сети автоэнкодера (многослойный персептрон). Вот мой код

# AE encoding arch
model=Sequential()
model.add(Dense(units= 2000, activation= 'relu', input_shape= (784,)))
model.add(Dense(units= 1200, activation= 'relu'))
model.add(Dense(units= 500, activation= 'relu'))

# latent representation (lower dim representation)
model.add(Dense(units= 10, activation= 'sigmoid')) # mark this activation

# AE decoding arch
model.add(Dense(units= 500, activation= 'relu'))
model.add(Dense(units= 1200, activation= 'relu'))
model.add(Dense(units= 2000, activation= 'relu'))
model.add(Dense(units = 784))

Код выше работает отлично. Ранее я использовал «softmax» в качестве активации в скрытом представлении плотного слоя:

model.add(Dense(units= 10, activation= 'softmax')) # mark this activation

Похоже, он застрял в локальных минимумах. Потеря не снижалась.

Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 7s 123us/step - loss: 0.0901 - val_loss: 0.0874
Epoch 2/20
60000/60000 [==============================] - 6s 106us/step - loss: 0.0872 - val_loss: 0.0875
Epoch 3/20
60000/60000 [==============================] - 6s 106us/step - loss: 0.0872 - val_loss: 0.0882
Epoch 4/20
60000/60000 [==============================] - 6s 106us/step - loss: 0.0872 - val_loss: 0.0875
Epoch 5/20
60000/60000 [==============================] - 6s 105us/step - loss: 0.0871 - val_loss: 0.0875

Что здесь происходит? Почему sigmoid работает, а не softmax? Разве оба не служат одной и той же цели?

...