В чем разница между BinaryCrossentropy (from_logits = True) как потерей вместо активации softmax на последнем уровне? - PullRequest
0 голосов
/ 26 апреля 2020

При построении модели NN, если мы работаем над проблемой классификации, насколько мне известно, нам нужна функция активации на последнем уровне. В уроке (https://www.tensorflow.org/tutorials/images/cnn?hl=tr) написано "... затем добавьте один или несколько плотных слоев сверху. CIFAR имеет 10 выходных классов, поэтому вы используете конечный плотный слой с 10 выходами и активация softmax. " Модель:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import models, layers

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

Итак, мой вопрос: где находится функция активации softmax в модели? То же самое в (https://www.tensorflow.org/tutorials/images/classification?hl=tr). Это проблема двоичной классификации, и на последнем уровне нет функции активации. Кроме того,

  • с моделью выше, какие методы я могу использовать напрямую: model.predict_classes () model.predict () model.predict_proba ()

  • Почему / когда / в каких типах ситуаций я бы предпочел использовать вышеуказанную структуру вместо последнего слоя с параметром активации = "softmax"?

Спасибо.

1 Ответ

1 голос
/ 28 апреля 2020

Функция активации softmax входит в последний уровень, но вопрос о том, когда ее использовать, зависит от ваших данных, меток, функции потерь и оптимизатора. на самом деле, единственное, что добавляет эта функция, это вывод вашего последнего слоя в значения вероятности. Это отвечает на ваш вопрос, какой прогноз использовать. Например, если у вас есть мультиклассовая классификация и целочисленные метки, такие как [0,1,2], не имеющие softmax, это может ускорить ваше обучение. Но опять же, это зависит от вашего оптимизатора. У меня был опыт, когда я должен был использовать Adamax без softmax для лучшего результата.

predictions = model(features)
predictions[:5]

<tf.Tensor: shape=(5, 3), dtype=float32, numpy=
array([[-0.24120538, -6.219783  , -0.28271127],
       [-0.3727467 , -7.456743  , -0.2836677 ],
       [ 0.29496336, -5.0277514 , -1.2696607 ],
       [ 0.27997503, -4.6681266 , -1.181448  ],
       [-0.23913011, -5.8720627 , -0.23690107]], dtype=float32)>
tf.nn.softmax(predictions[:5])
<tf.Tensor: shape=(5, 3), dtype=float32, numpy=
array([[5.0971615e-01, 1.2908182e-03, 4.8899299e-01],
       [4.7755370e-01, 4.0038861e-04, 5.2204597e-01],
       [8.2369196e-01, 4.0191957e-03, 1.7228886e-01],
       [8.0710059e-01, 5.7278876e-03, 1.8717149e-01],
       [4.9855182e-01, 1.7838521e-03, 4.9966437e-01]], dtype=float32)>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...