私は、260,000行35列の「ワンホットエンコーディング」(すべて1とゼロ)のデータマトリックスを持っています。私は、連続変数を予測するために単純なニューラルネットワークを訓練するために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)])
しかし、訓練プロセスの間に、私はうまく損失の減少を参照してくださいが、2番目のエポックの途中で、それはナンに行く:
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
SGD
の代わりにRMSProp
を試してみましたが、relu
の代わりにtanh
を試しましたが、ドロップアウトなしで試してみました。私は、より小さなモデル、すなわち1つの隠れたレイヤーと同じ問題(それは異なるポイントでナノになる)で試しました。ただし、機能が少ない(つまり列が5つしかなく、かなり良い予測を行う)場合にも機能します。何らかのオーバーフローがあるように見えますが、私は理由を想像することはできません。損失は不当に大きくないわけではありません。
Pythonバージョン2.7.11は、Linuxマシンで実行され、CPUのみです。私はTheanoの最新バージョンでそれをテストしました。そしてNansも取得しましたので、Theano 0.8.2に行って同じ問題を抱えてみました。 Kerasの最新バージョンには同じ問題があり、0.3.2バージョンもあります。
try loss = 'mean_squared_error'、オプティマイザ= 'adam'は1つの隠れたレイヤーで、まだナンセンスですか? –
@ 1 '' Adamオプティマイザで上記のモデルを使用すると、私はナンを得る。 1つのレイヤーだけで、3つのエポックのトレーニングの間にナンセンスを与えません。 –