[source]

TimeDistributed

keras.layers.wrappers.TimeDistributed(layer)

このラッパーにより,入力のすべての時間スライスにレイヤーを適用することができます.

入力は少なくとも3次元である必要があります. インデックスの次元は時間次元であると見なされます.

例えば,32個のサンプルを持つバッチを考えます.各サンプルは16次元で構成される10個のベクトルを持ちます. このとき,バッチの入力の形状は(32, 10, 16)となります(input_shapeはサンプル数の次元を含まないため,(10, 16)となります).

このとき,10個のタイムスタンプのレイヤーそれぞれにDenseを適用するために,TimeDistributedを利用することができます:

# as the first layer in a model
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# now model.output_shape == (None, 10, 8)

# subsequent layers: no need for input_shape
model.add(TimeDistributed(Dense(32)))
# now model.output_shape == (None, 10, 32)

出力の形状は(32, 10, 8)となります.

これは,厳密にはlayers.core.TimeDistributedDenseを利用することと同等であることに注意してください. しかしながら,TimeDistributedとの違いは,Denseだけではなく,任意のレイヤーに対して利用することが可能な点です. 例えば,Convolution2Dレイヤーに対して:

model = Sequential()
model.add(TimeDistributed(Convolution2D(64, 3, 3), input_shape=(10, 3, 299, 299)))

引数

  • layer: レイヤーインスタンス.

[source]

Bidirectional

keras.layers.wrappers.Bidirectional(layer, merge_mode='concat', weights=None)

RNNのBidirectionalなラッパー.

引数

  • layer: Recurrentインスタンス.
  • merge_mode: RNNのforwardとbackwardの出力同士を組み合わせる際のモード.{'sum', 'mul', 'concat', 'ave', None}のいづれか.Noneの場合,出力はリストになります.
  • Examples:
model = Sequential()
model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 10)))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')