Точность модели Keras не улучшается - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь обучить нейронную сеть прогнозировать рейтинги игроков в FIFA 18 по easports (рейтинги между 64-99). Я использую их базу данных игроков (https://easports.com/fifa/ultimate-team/api/fut/item?page=1), и я обработал данные в training_x, testing_x, training_y, testing_y. Каждый из обучающих образцов представляет собой массив numpy, содержащий 7 значений ... первые 6 являются различные характеристики игрока (стрельба, пас, дриблинг и т. д.) и последнее значение - это позиция игрока (которую я отобразил в диапазоне от 1 до 8, в зависимости от позиции), и каждое из значений тестирования представляет собой одно целое число между 64-99, представляющий рейтинг этого игрока.

Я пробовал много разных гиперпараметров, включая изменение функций активации на tanh и relu, и я пытался добавить пакетный слой нормализации после первого плотного слоя (я подумал, что это может быть полезно, так как одна из моих функций очень маленький, и другие функции находятся между 50-99), я играл с оптимизатором SGD (изменил скорость обучения, импульс, даже попытался изменить оптимизатор на Адама), попробовал различные функции потери, добавил / удалил выпадающие слои, и пробовал разные регуляризаторы для весов модели.

model = Sequential()
model.add(Dense(64, input_shape=(7,), 
          kernel_regularizer=regularizers.l2(0.01)))
//batch normalization?
model.add(Activation('sigmoid'))
model.add(Dense(64, kernel_regularizer=regularizers.l2(0.01), 
          activation='sigmoid'))
model.add(Dropout(0.3))
model.add(Dense(32, kernel_regularizer=regularizers.l2(0.01), 
          activation='sigmoid'))
model.add(Dense(1, activation='linear'))
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_absolute_error', metrics=['accuracy'], 
          optimizer=sgd)
model.fit(training_x, training_y, epochs=50, batch_size=128, shuffle=True)

Когда я тренирую модель, потеря всегда равна нан, а точность всегда равна 0, хотя я пытался настроить множество различных параметров. Тем не менее, если я удаляю последнюю функцию из моих данных, положение игроков и обновляю форму ввода первого плотного слоя, модель фактически «тренируется» и получается с точностью около 6% независимо от того, какие параметры я изменяю. В этом случае я обнаружил, что модель предсказывает рейтинг только 79. Что я делаю по своей сути неправильно?

1 Ответ

0 голосов
/ 17 января 2019

Вы можете попробовать следующие шаги:

  1. Использовать среднеквадратичная ошибка функция потерь.
  2. Используйте Адам , который поможет вам быстрее сходиться с низкой скоростью обучения, такой как 0,0001 или 0,001. В противном случае попробуйте использовать оптимизатор RMSprop .
  3. Использовать регуляризаторы по умолчанию . На самом деле это не так.
  4. Поскольку это регрессионная задача, использует функцию активации, такую ​​как ReLU, во всех слоях, кроме выходного слоя (включая входной слой). Используйте линейную активацию в выходном слое .
  5. Как уже упоминалось в комментариях @pooyan, нормализует функции . Смотрите здесь . Даже попробуйте стандартизировать функции . Используйте тот, который подходит лучше всего.
...