Керас с большими потерями, не уменьшаясь с каждой эпохой - PullRequest
0 голосов
/ 30 июня 2018

Я учу Н.Н. и Кераса. Мои тестовые данные примерно такие:

Result, HomeWinPossibility, DrawPossibility, AwayWinPossibility
[['AwayWin' 0.41 0.28 0.31]
 ['HomeWin' 0.55 0.25 0.2]
 ['AwayWin' 0.17 0.21 0.62]
 .....

Вот моя модель:

model = Sequential()
model.add(Dense(16, input_shape=(3,)))
model.add(Activation('sigmoid'))
model.add(Dense(8, activation='relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=["accuracy"])
model.fit(train_X, train_y_ohe, epochs=100, batch_size=1, verbose=1);

Выход из пригонки:

Epoch 1/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9151 - acc: 0.5737
Epoch 2/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9181 - acc: 0.5474
Epoch 3/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9111 - acc: 0.5526
Epoch 100/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9130 - acc: 0.5579

Так почему потеря не уменьшается, как некоторые NN учебники, которые я читаю? Это потому, что предоставленные мною данные представляют собой просто помехи, поэтому NN не может найти какой-либо подсказки или что-то не так с моей моделью?

Поскольку acc всегда составляет около 0,55 (то есть 50%), означает ли это, что NN фактически достигнуто лучше, чем случайное угадывание (> 33%)? Если это правда, почему он достиг точности 0,57 в первую эпоху?

1 Ответ

0 голосов
/ 30 июня 2018

Так почему потеря не уменьшается, как некоторые NN учебники, которые я прочитал?

Причин может быть много - все зависит от ваших данных. Вот что вы можете настроить:

  • У вас очень низкий размер партии. Хотя некоторые данные могут на самом деле реагировать на это, я думаю, что размер пакета 1 будет слишком мал в большинстве случаев - без начала работы с избыточностью структуры, которую вы показываете при использовании размера пакета 1 Размер пакета очень зависит от того, сколько и какого типа у вас есть данные, но попробуйте где-нибудь около 20-30, если у вас достаточно данных.

  • Попробуйте разные функции активации (но всегда используйте softmax или sigmoid в последнем слое, потому что вам нужны числа от 0 до 1).

  • Увеличьте количество юнитов в первом и / или втором слое (если у вас достаточно данных).

  • Попробуйте установить скорость обучения (lr) для оптимизатора Адама: model.compile(optimizer=keras.optimizers.Adam(lr=0.001), ...)

Это потому, что предоставленные мною данные представляют собой просто шумы

Если ваши данные представляют собой чистый шум в разных классах, то весьма вероятно, учитывая, что в каждом классе имеется примерно одинаковое количество точек данных, точность будет около 33%, поскольку по сути это будет просто случайное предположение.

Так как акк всегда около 0,55 (то есть 50%). Означает ли это, что NN фактически достигнуто лучше, чем случайное угадывание (33%)?

Не обязательно. Точность является мерой того, сколько классов было правильно классифицировано. Предположим, что данные проверки (условно часть набора данных, на которой рассчитывается точность) содержат только данные одного класса. Тогда, если NN только классифицирует все к этому одному классу, данные проверки будут иметь 100% точность!

Это означает, что если у вас нет одинакового количества точек данных для каждого класса, точности нельзя доверять в одиночку! Гораздо лучшая мера в случаях, когда у вас есть несбалансированные наборы данных, например, AUC (площадь под кривой ROC) или показатель F1, который также учитывает ложные срабатывания.


Я бы порекомендовал вам взглянуть на теорию, стоящую за этим. Просто слепо бегать, вероятно, очень раздражает, потому что вам будет очень трудно получить хорошие результаты. И даже если вы получили хорошие результаты, они часто могут быть не такими хорошими, как вы думаете. Одно место для чтения - книга Яна Гудфеллоу по глубокому обучению .

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