Потеря NaN при обучении регрессионной сети
У меня есть матрица данных в «горячем кодировании» (все единицы и нули) с 260 000 строк и 35 столбцов. Я использую Keras для обучения простой нейронной сети для прогнозирования непрерывной переменной. Код для создания сети следующий:
model = Sequential()
model.add(Dense(1024, input_shape=(n_train,)))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(1))
sgd = SGD(lr=0.01, nesterov=True);
#rms = RMSprop()
#model.compile(loss='categorical_crossentropy', optimizer=rms, metrics=['accuracy'])
model.compile(loss='mean_absolute_error', optimizer=sgd)
model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, verbose=1, validation_data=(X_test,Y_test), callbacks=[EarlyStopping(monitor='val_loss', patience=4)] )
Тем не менее, в процессе обучения, я вижу, что потери хорошо уменьшаются, но в середине второй эпохи они переходят к nan:
Train on 260000 samples, validate on 64905 samples
Epoch 1/3
260000/260000 [==============================] - 254s - loss: 16.2775 - val_loss:
13.4925
Epoch 2/3
88448/260000 [=========>....................] - ETA: 161s - loss: nan
Я пытался с помощьюRMSProp
вместоSGD
, Я старалсяtanh
вместоrelu
Я пытался с и без отсева, все безрезультатно. Я попытался с меньшей моделью, то есть только с одним скрытым слоем, и той же самой проблемой (это становится nan в другой точке). Однако он работает с меньшим количеством функций, т. Е. Если имеется только 5 столбцов, и дает довольно хорошие прогнозы. Похоже, что происходит какое-то переполнение, но я не могу себе представить, почему - потери не слишком велики.
Python версии 2.7.11, работает на компьютере с Linux, только процессор. Я протестировал его с последней версией Theano, и у меня также есть Nans, поэтому я попытался перейти на Theano 0.8.2 и столкнулся с той же проблемой. С последней версией Keras такая же проблема, как и с версией 0.3.2.