Perda de NaN ao treinar rede de regressão
Eu tenho uma matriz de dados em "one-hot encoding" (todos os zeros) com 260.000 linhas e 35 colunas. Estou usando o Keras para treinar uma rede neural simples para prever uma variável contínua. O código para fazer a rede é o seguinte:
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)] )
No entanto, durante o processo de treinamento, vejo a perda diminuir muito bem, mas no meio da segunda época, ela vai para 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
Eu tentei usarRMSProp
ao invés deSGD
, Eu tenteitanh
ao invés derelu
, Tentei com e sem abandono, tudo sem sucesso. Tentei com um modelo menor, ou seja, com apenas uma camada oculta e o mesmo problema (ele se torna nan em um ponto diferente). No entanto, ele funciona com menos recursos, ou seja, se houver apenas 5 colunas e fornece boas previsões. Parece haver algum tipo de excesso, mas não consigo imaginar por que - a perda não é excessivamente grande.
Python versão 2.7.11, executando em uma máquina Linux, apenas CPU. Eu testei com a versão mais recente do Theano e também recebo Nans, então tentei ir para o Theano 0.8.2 e tenho o mesmo problema. Com a versão mais recente do Keras, o mesmo problema e também com a versão 0.3.2.