时间分布层在Keras中的作用是什么?

时间:2017-11-15 10:57:46

标签: python machine-learning keras neural-network deep-learning

我正在努力了解TimeDistributed wrapper在Keras中的作用。

我得到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)

任何人都可以解释RNN层之后TimeDistributed和Dense层之间的区别吗?

1 个答案:

答案 0 :(得分:33)

keras中 - 在构建顺序模型时 - 通常是第二维(一个在样本维度之后) - 与time维度相关。这意味着,例如,如果您的数据为5-dim(sample, time, width, length, channel),则可以使用TimeDistributed应用卷积层(适用于4-dim (sample, width, length, channel))沿着时间维度(将相同的图层应用于每个时间片)以获得5-d输出。

Dense的情况是版本2.0 keras中的Dense默认情况下仅应用于最后一维(例如,如果您将Dense(10)应用于带有形状{的输入{1}}您将获得具有(n, m, o, p)形状的输出,因此在您的情况下,(n, m, o, 10)Dense是等效的。