web-dev-qa-db-ja.com

KerasのTimeDistributedレイヤーの役割は何ですか?

私は、KerasでTimeDistributedラッパーが何をするかを把握しようとしています。

TimeDistributedは「入力のすべての時間スライスにレイヤーを適用します」とわかります。

しかし、私はいくつかの実験を行い、理解できない結果を得ました。

要するに、LSTMレイヤーに関連して、TimeDistributedとDenseレイヤーだけが同じ結果をもたらします。

model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add(TimeDistributed(Dense(1)))
print(model.output_shape)

model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add((Dense(1)))
print(model.output_shape)

両方のモデルについて、(None、10、1)の出力形状が得られました。

RNNレイヤーの後、TimeDistributedレイヤーとDenseレイヤーの違いを説明できる人はいますか?

43
Buomsoo Kim

In keras-シーケンシャルモデルの構築中-通常は2番目のディメンション(サンプルディメンションの1つ後)-timeディメンションに関連付けられます。これは、たとえば、データが5-dim(sample, time, width, length, channel)の場合、TimeDistributed4-dim(sample, width, length, channel)に適用可能)を使用して畳み込みレイヤーを時間ディメンション(各タイムスライスに同じレイヤーを適用)に沿って適用できることを意味します5-d出力を取得します。

Denseの場合は、バージョン2.0のkerasDenseがデフォルトで最後の次元にのみ適用されます(たとえば、形状(n, m, o, p)の入力にDense(10)を適用すると、形状の出力が得られます) (n, m, o, 10))あなたの場合、DenseTimeDistributed(Dense)は同等です。

43
Marcin Możejko