Почему моя нейронная сеть Keras всегда предсказывает один и тот же ярлык для всех входных данных? - PullRequest
0 голосов
/ 01 апреля 2019

Проблема

Я пытаюсь предсказать проблему двух классов: кошки и не кошки.Мои метки являются двоичными (1 и 0).Проблема, с которой я сталкиваюсь, заключается в том, что Керас всегда предсказывает, что все лица будут кошками, независимо от истинных ярлыков.Я просмотрел несколько похожих сообщений на этом форуме, чтобы выяснить проблему. Ни одна из них не кажется убедительной в моей проблеме.Мой тренировочный набор данных и тестовый набор данных, где должным образом предварительно обработаны (преобразованы, чтобы попасть в диапазон от 0 до 1).Также я понимаю, что точность обучения является средним значением моих входных меток (меток со значениями 0 и 1).

Что я уже пробовал?

  • Пытался уменьшить нет.нейронов в моем скрытом слое;
  • Скорректирована скорость обучения с различными значениями;
  • Скорректирован размер пакета;
  • Попытка изменения функции активации в конечном слое;
  • Пробовал разные функции потерь;
  • Пробовал разные оптимизаторы;
  • Гарантировал, что данные обучения перемешаны.

Я воспроизводлю критическиечасти кода ниже для большей проницательности:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(200, input_shape=(12288,), 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))
model.add(tf.keras.layers.Dense(1, input_shape=(200,), activation='relu', 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))
model.add(tf.keras.layers.Dense(1, activation='tanh', 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))

# Compile the model
sgd = tf.keras.optimizers.SGD(lr=0.004, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error',
          optimizer=sgd,
          metrics=['accuracy'])

model.fit(train_x, train_labels,
      batch_size=batch_size,
      shuffle=True,
      epochs=epochs,
      validation_data=(test_x, test_labels))

# Evaluate the model
scores = model.evaluate(test_x, test_labels)

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])

Мой вывод всегда такой:

Epoch 14/15
209/209 [==============================] - 0s 1ms/sample - loss: 0.2259 - acc: 0.6555 - val_loss: 0.3237 - val_acc: 0.3400
Epoch 15/15
209/209 [==============================] - 0s 1ms/sample - loss: 0.2261 - acc: 0.6555 - val_loss: 0.3229 - val_acc: 0.3400
50/50 [==============================] - 0s 333us/sample - loss: 0.3229 - acc: 0.3400
Loss: 0.323
Accuracy: 0.340

Эта точность выше является лишь среднейиз всех в моих бинарных учебных целях.

...