TimeDistributed
keras.layers.TimeDistributed(layer)
Эта оболочка применяет слой к каждому временному срезу входного сигнала.
Входной сигнал должен быть как минимум трехмерным, а размер индекса один будет считаться временным измерением.
Рассмотрим батч из 32 семплов, где каждый семпл представляет собой последовательность из 10 векторов размером 16. Тогда входной формой батча будет (32, 10, 16), а input_shape, не включающий количество семплов, будет (10, 16).
Затем можно использовать TimeDistributed для применения Dense слоя к каждому из 10 векторов независимо друг от друга:
# как первый слой в модели
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))# теперь model.output_shape == (None, 10, 8)
После этого выходные данные будут иметь форму (32, 10, 8).
В последующих слоях нет необходимости в input_shape:
model.add(TimeDistributed(Dense(32)))# теперь model.output_shape == (None, 10, 32)
После этого выходные данные будут иметь форму (32, 10, 32).
TimeDistributed может использоваться с произвольными слоями, а не только Dense, например, с Conv2D слоем:
model = Sequential()
model.add(TimeDistributed(Conv2D(64, (3, 3)),
input_shape=(10, 299, 299, 3)))
Аргумент
- layer: экземпляр слоя.
Bidirectional
keras.engine.base_layer.wrapped_fn()
Двунаправленная оболочка для RNN.
Аргументы
- layer: Recurrent экземпляр.
- merge_mode: Режим, в котором будут объединены выходы прямого и обратного RNN. Один из {‘sum’, ‘mul’, ‘concat’, ‘ave’, None}. Если None, выходы не будут объединены, они будут возвращены в виде списка.
- weights: Начальные веса для загрузки в двунаправленной модели.
Возвращает исключения
- ValueError: В случае недействительного аргумента merge_mode.
Примеры
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’)