Понимание Нейронной Сети Подачи Вперед - PullRequest
0 голосов
/ 29 января 2019

Я построил прямую нейронную сеть с 3 скрытыми слоями для решения проблемы регрессии.Метрики, которые я использую для проверки, - MAPE.Ниже приведены параметры модели

#Define the model
NN_model = Sequential()

# The Input Layer :
NN_model.add(Dense(128, kernel_initializer='normal',input_dim = X_train.shape[1], activation='relu'))

# The Hidden Layers :
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))

# The Output Layer :
NN_model.add(Dense(1, kernel_initializer='normal',activation='linear'))

# Compile the network :
NN_model.compile(loss='mean_absolute_percentage_error', optimizer='adam', metrics=['mean_absolute_percentage_error'])
##NN_model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['mean_absolute_error'])
NN_model.summary()

Пример вывода выглядит следующим образом:

Train on 18000 samples, validate on 4500 samples
Epoch 1/500
18000/18000 [==============================] - 3s 148us/step - loss: 672.5252 - mean_absolute_percentage_error: 672.5252 - val_loss: 29.3799 - val_mean_absolute_percentage_error: 29.3799

Epoch 00001: val_loss improved from inf to 29.37992, saving model to Weights-001--29.37992.hdf5
Epoch 2/500
18000/18000 [==============================] - 2s 133us/step - loss: 739.9019 - mean_absolute_percentage_error: 739.9019 - val_loss: 220.4918 - val_mean_absolute_percentage_error: 220.4918

Epoch 00002: val_loss did not improve from 29.37992
Epoch 3/500
18000/18000 [==============================] - 2s 129us/step - loss: 840.8005 - mean_absolute_percentage_error: 840.8005 - val_loss: 18.5716 - val_mean_absolute_percentage_error: 18.5716

Мой вопрос заключается в том, что в каждую эпоху я вижу среднюю процентную ошибку и валидацию средней абсолютной процентной ошибки.Последнее, кажется, ниже, чего я и ожидаю. Почему средняя абсолютная процентная ошибка настолько отличается и намного превышает среднюю абсолютную ошибку валидации?

Кроме того, почему среднеквадратичная ошибка валидации так сильно колеблется?

Цените любой вклад.

Ответы [ 2 ]

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

MAPE может быть довольно слабым из-за небольшого разброса входных значений.

Предположим, мы говорим о классической линейной регрессии, чтобы упростить визуализацию.К сожалению, у вас получилась линейная регрессия на красивой классической сигмоиде - от нуля до единицы, с точкой перегиба 0,5, от -inf до inf.

Ваши наилучшие возможные усилия будет строкой, определенной как 0x+0.5.Вы просто физически не можете добиться большего успеха с моделью, которую вы используете.И все же, ваш MAPE будет на 50%, а не что-то сумасшедшее, как 10000%.

Эта модель, конечно, полная чушь, но ее неправильность ограничена довольно небольшим диапазоном значений.

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

Что касается колебаний, трудно сказать, что банкомат - вы только что показали первые три эпохи, этовозможно, все еще пытается найти основание для данных.Я бы посмотрел, сохраняется ли проблема во время дальнейшего обучения, прежде чем ставить какие-либо диагнозы.

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

Похоже, ваша модель вообще ничего не может выучить.Вы проверяли свои входные данные?

Другая проблема может заключаться в том, что градиенты слишком велики, что приводит к "отсутствию сходимости".Поэтому ваша потеря просто «случайно» колеблется.

Так что проверьте свои тренировочные данные, попробуйте масштабировать их и использовать другую функцию потери!Надеюсь, это поможет.

...