密集与时间分布(密集)
Dense vs. TimeDistributed(Dense)
这两种使用Dense
层的方法有什么区别吗?似乎输出形状相同且参数数量相同。
- 如果我们使用固定权重,输出是否相同?
- 训练时结果会一样吗?
def test_rnn_output_v1():
max_seq_length = 10
n_features = 8
rnn_dim = 64
dense_dim = 16
input = Input(shape=(max_seq_length, n_features))
out = LSTM(rnn_dim, return_sequences=True)(input)
out = Dense(dense_dim)(out)
model = Model(inputs=[input], outputs=out)
print(model.summary())
# (None, max_seq_length, n_features)
# (None, max_seq_length, dense_dim)
def test_rnn_output_v2():
max_seq_length = 10
n_features = 8
rnn_dim = 64
dense_dim = 16
input = Input(shape=(max_seq_length, n_features))
out = LSTM(rnn_dim, return_sequences=True)(input)
out = TimeDistributed(Dense(dense_dim))(out)
model = Model(inputs=[input], outputs=out)
print(model.summary())
# (None, max_seq_length, n_features)
# (None, max_seq_length, dense_dim)
TimeDistributed(Dense(...))
和 Dense(...)
之间没有区别,它们具有完全相同的输出维度和连接性。那是因为 Dense
图层应用于其输入的最后一个轴;因此,它是否包裹在 TimeDistributed
层中并没有什么区别。 更详细地解释了 Dense
层的工作原理。
这两种使用Dense
层的方法有什么区别吗?似乎输出形状相同且参数数量相同。
- 如果我们使用固定权重,输出是否相同?
- 训练时结果会一样吗?
def test_rnn_output_v1():
max_seq_length = 10
n_features = 8
rnn_dim = 64
dense_dim = 16
input = Input(shape=(max_seq_length, n_features))
out = LSTM(rnn_dim, return_sequences=True)(input)
out = Dense(dense_dim)(out)
model = Model(inputs=[input], outputs=out)
print(model.summary())
# (None, max_seq_length, n_features)
# (None, max_seq_length, dense_dim)
def test_rnn_output_v2():
max_seq_length = 10
n_features = 8
rnn_dim = 64
dense_dim = 16
input = Input(shape=(max_seq_length, n_features))
out = LSTM(rnn_dim, return_sequences=True)(input)
out = TimeDistributed(Dense(dense_dim))(out)
model = Model(inputs=[input], outputs=out)
print(model.summary())
# (None, max_seq_length, n_features)
# (None, max_seq_length, dense_dim)
TimeDistributed(Dense(...))
和 Dense(...)
之间没有区别,它们具有完全相同的输出维度和连接性。那是因为 Dense
图层应用于其输入的最后一个轴;因此,它是否包裹在 TimeDistributed
层中并没有什么区别。 Dense
层的工作原理。