そう:
1対1:Dense
シーケンスを処理していないため、レイヤーを使用できます。
model.add(Dense(output_size, input_shape=input_shape))
1対多:このオプションはサポートされていません。モデルのチェーンはで簡単ではないKeras
ため、次のバージョンが最も簡単です。
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
多対1:実際、コードスニペットは(ほぼ)このアプローチの例です。
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
多対多:これは、入力と出力の長さが繰り返しステップの数と一致する場合に最も簡単なスニペットです。
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
ステップ数が入力/出力長と異なる場合の多対多:これはKerasでは非常に困難です。それをコーディングする簡単なコードスニペットはありません。
編集:広告5
私の最近のアプリケーションの1つで、4番目の画像の多対多に似たものを実装しました。次のアーキテクチャのネットワークが必要な場合(入力が出力より長い場合):
O O O
| | |
O O O O O O
| | | | | |
O O O O O O
これは次の方法で実現できます。
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :]
N
カバーしたい最後のステップの数はどこですか(画像N = 3
)。
この時点から:
O O O
| | |
O O O O O O
| | |
O O O
適切なサイズに調整するために、ベクトルなどN
を使用して長さの人工的なパディングシーケンスと同じくらい簡単0
です。