Какова роль слоя TimeDistributed в Keras?


83

Я пытаюсь понять, что делает оболочка 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)

Для обеих моделей я получил форму вывода (Нет, 10, 1) .

Может ли кто-нибудь объяснить разницу между слоем TimeDistributed и Dense после слоя RNN?


1
Там на данный момент ссем не будет разницы, здесь обсуждение этого. Я думаю, что первоначальная цель заключалась в том, чтобы провести различие между Denseслоем, сглаживающим ввод, а затем изменяющим его форму, таким образом, соединяя разные временные шаги и имея больше параметров, и TimeDistributedсохраняя временные шаги разделенными (следовательно, имеющими меньше параметров). В вашем случае Denseдолжно было быть 500 параметров, TimeDistributedтолько 50
— gionni

@gionni Нет, у него одинаковое количество параметров (оба 6). Значит разницы практически нет атм?
— Buomsoo Kim

Да, именно такое количество параметров они имели бы, если бы была разница. На данный момент нет
— gionni

Ответы:


85

В kerasпроцессе построения последовательной модели обычно второе измерение (одно после измерения образца) связано с timeизмерением. Это означает, что если, например, ваши данные находятся 5-dimс (sample, time, width, length, channel)вами, вы можете применить сверточный слой, используя TimeDistributed(который применим к 4-dimwith (sample, width, length, channel)) по временному измерению (применяя один и тот же слой к каждому временному срезу), чтобы получить 5-dвыходные данные.

Дело в Denseтом, что в kerasверсии 2.0 Denseпо умолчанию применяется только к последнему измерению (например, если вы применяете Dense(10)ввод с формой, (n, m, o, p)вы получите вывод с формой (n, m, o, 10)), поэтому в вашем случае Denseи TimeDistributed(Dense)эквивалентны.


3
Вот пример использования TimeDistributed, обертывающего саму модель. Когда это применяется к Inputтензору, есть ли какое-нибудь отличие от этого по сравнению с простым выполнением mapмодели, примененной к списку, содержащему каждый фрагмент Input?
— CMCDragonkai
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.