私はNNにはかなり新しいので、何かをコピーする代わりにLSTMで自分の "Hello World"をやっています。私は次のような簡単なロジックを選択しました:LSTMトレーニングパターン
入力は3タイムステップです。最初は1または0のいずれかであり、残りの2つは乱数です。期待される出力は、入力の最初のタイムステップと同じです。データフィードは次のようになります。
_X0=[1,5,9] _Y0=[1] _X1=[0,5,9] _Y1=[0] ... 200 more records like this.
この単純な(?)ロジックは100%正確に訓練できます。私は多くのテストを実行しました。最も効率的なモデルは3つのLSTMレイヤーで、それぞれ15個の隠しユニットがありました。これは、22エポック後に100%の精度を返した。
しかし、最初の12エポックでは、モデルは正確性(0.5のまま)で測定されても全く進展せず、カテゴリクロスエントロピー(0.69-0.65 )。その後、エポック12からエポック22までは、精度1.0まで非常に速く訓練されます。問題は、なぜこのようなトレーニングが行われるのでしょうか?なぜ最初の12個のエポックが進展していないのですか?12-22個のエポックがずっと効率的なのはなぜですか?それは多くの要因に依存する
from keras.models import Sequential
from keras.layers import Input, Dense, Dropout, LSTM
from keras.models import Model
import helper
from keras.utils.np_utils import to_categorical
x_,y_ = helper.rnn_csv_toXY("LSTM_hello.csv",3,"target")
y_binary = to_categorical(y_)
model = Sequential()
model.add(LSTM(15, input_shape=(3,1),return_sequences=True))
model.add(LSTM(15,return_sequences=True))
model.add(LSTM(15, return_sequences=False))
model.add(Dense(2, activation='softmax', kernel_initializer='RandomUniform'))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['acc'])
model.fit(x_, y_binary, epochs=100)
使用しているKerasのバージョンは?トレーニングログを投稿できますか? – nemo
Keras 2.0.3を使用します – Manngo