入力に複数の時系列があり、LSTMモデルを適切に構築したいと考えています。
パラメータの選び方が本当に混乱しています。私のコード:
model.add(keras.layers.LSTM(hidden_nodes, input_shape=(window, num_features), consume_less="mem"))
model.add(Dropout(0.2))
model.add(keras.layers.Dense(num_features, activation='sigmoid'))
optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
各行について、入力パラメーターの意味とそれらを選択する方法を理解したいと思います。
実際、コードに問題はありませんが、より良い結果を得るには、パラメーターを明確に理解する必要があります。
どうもありがとう!
Keras.ioドキュメントのこの part は非常に役立ちます:
LSTM入力形状:形状のある3Dテンソル(batch_size、timesteps、input_dim)
また、例のパラメーターについても説明します。
model.add(LSTM(hidden_nodes, input_shape=(timesteps, input_dim)))
model.add(Dropout(dropout_value))
hidden_nodes=これはLSTMのニューロンの数です。番号が大きいほど、ネットワークはより強力になります。ただし、学習するパラメータの数も増えます。これは、ネットワークのトレーニングにさらに時間がかかることを意味します。
timesteps=検討するタイムステップの数。例えば。文を分類したい場合、これは文の単語数になります。
input_dim=フィーチャー/埋め込みの寸法。例えば。文中の単語のベクトル表現
dropout_value=過剰適合を減らすために、ドロップアウトレイヤーは可能なネットワーク接続の一部をランダムに取得します。この値は、エポック/バッチごとに考慮されるネットワーク接続のパーセンテージです。
ご覧のとおり、batch_sizeを指定する必要はありません。 Kerasが自動的に処理します。
optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
learning_rate=バッチごとに更新される重みの量を示します。
decay= learning_reateが時間の経過とともにどれだけ減少するか。
運動量=運動量の割合。より高い値は、極小値を克服し、学習プロセスをスピードアップするのに役立ちます。 詳細説明
nesterov= nesterovの運動量を使用する必要がある場合。 ここに良い説明があります。