最佳答案
我有一个数据矩阵在“一热编码”(所有1和0)与260,000行和35列。我在用克拉斯训练一个简单的神经网络来预测一个连续变量。建立网络的代码如下:
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,也遇到了同样的问题。与最新版本的 Keras 有同样的问题,也与0.3.2版本有关。