我有一個「單熱編碼」(全1和零)的數據矩陣,有260,000行和35列。我正在使用Keras來訓練一個簡單的神經網絡來預測一個連續變量。使網絡中的代碼如下:訓練迴歸網絡時NaN損失
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)])
然而,在訓練過程中,我很好看的損失減少,但第二個時期的中間過程,它進入楠:
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機器上運行,僅限CPU。我用最新版本的Theano測試了它,而且我也得到了Nans,所以我嘗試去Theano 0.8.2並且有同樣的問題。與最新版本的凱拉斯有同樣的問題,並且還與0.3.2版本。
嘗試損失='mean_squared_error',優化器='亞當'與一個隱藏層 - 仍然nans? –
@ 1「當Adam優化器使用上述模型時,我會得到nans。僅僅有一層,在三個培訓階段並沒有提供任何幫助。 –