私のリカレントニューラルネットワーク(LSTM、またはGRU)は、私が説明できない方法で動作します。トレーニングが開始され、突然精度が低下する(そして、損失が急速に増加する)ときに、トレーニングとテストの両方のメトリックが適切にトレーニングされます(結果はかなり良く見えます)。時々、ネットはおかしくなり、ランダムな出力を返し、時々(与えられた3つの例の最後のように)、すべての入力に同じ出力を返し始めます。
あなたが持っています。この動作のための任意の説明を?どんな意見でも大歓迎です。以下のタスクの説明と図を参照してください。
タスク:単語からword2vecベクトルを予測する
入力:独自のword2vecモデル(正規化済み)があり、ネットワークに単語(文字で文字)を入力します。単語にパディングします(下の例を参照)。
例:フットボールという単語があり、100次元幅のword2vecベクトルを予測したいとします。次に、入力は$football$$$$$$$$$$
です。
動作の3つの例:
単層LSTM
model = Sequential([
LSTM(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
単層GRU
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
二重層LSTM
model = Sequential([
LSTM(512, input_shape=encoder.shape, return_sequences=True),
TimeDistributed(Dense(512, activation="sigmoid")),
LSTM(512, return_sequences=False),
Dense(256, activation="tanh"),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
また、以前に同様のアーキテクチャを使用した別のプロジェクトでこの種の動作を経験しましたが、その目的とデータは異なりました。したがって、理由はデータや特定の目的に隠すべきではなく、アーキテクチャに隠すべきです。
nan
ます。
nan
パラメータはナン以外の損失にはなりません。私の推測では、あなたの勾配はたまたま爆発し、非バッチ正規化ネットワークでも同様のことが起こりました。
nan
1つは計算の1つに現れ、それからデフォルトで別の値になり、ネットワークがおかしくなりました。しかし、それは単なる乱暴な推測です。ご意見ありがとうございます。