260,000 行 35 列の「ワンホット エンコーディング」(すべて 1 と 0) のデータ マトリックスがあります。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)] )
ただし、トレーニング プロセス中は損失が適切に減少することがわかりますが、2 番目のエポックの途中で 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
試しました 、ドロップアウトの有無にかかわらず試しましたが、すべて無駄でした。私は小さなモデル、つまり隠れ層が 1 つしかないモデルで試してみましたが、同じ問題が発生しました (別の時点で nan になります)。ただし、少ない機能、つまり 5 列しかない場合でも機能し、非常に優れた予測が得られます。なんらかのオーバーフローがあるように見えますが、その理由は想像できません。損失は不当に大きくはありません。 tanh
relu
Python バージョン 2.7.11、Linux マシンで実行、CPU のみ。Theano の最新バージョンでテストしましたが、Nans も取得したので、Theano 0.8.2 に行ってみましたが、同じ問題が発生しました。最新バージョンの Keras には同じ問題があり、バージョン 0.3.2 でも同様です。