我运行了a Keras LSTM demo,其中包含以下代码(在第166行之后):
m = 1
model=Sequential()
dim_in = m
dim_out = m
nb_units = 10
model.add(LSTM(input_shape=(None, dim_in),
return_sequences=True,
units=nb_units))
model.add(TimeDistributed(Dense(activation='linear', units=dim_out)))
model.compile(loss = 'mse', optimizer = 'rmsprop')
当我向model.summary()
发起呼叫时,会看到以下输出:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_4 (LSTM) (None, None, 10) 480
_________________________________________________________________
time_distributed_4 (TimeDist (None, None, 1) 11
=================================================================
Total params: 491
Trainable params: 491
Non-trainable params: 0
我了解到时间分布层的11个参数仅由nb_units
权重和一个偏差值组成。
params = 4 * ((input_size + 1) * output_size + output_size^2)
在我使用input_size = 1
和output_size = 1
的情况下,这对于10个单位中的每个单位仅产生12个参数,总计120个参数。与报告的480相比,误差减少了4倍。我的错误在哪里?
答案 0 :(得分:1)
params
公式适用于整个图层,而不适用于Keras单位。
引用this answer:
[在Keras中,单位表示LSTM中内部单元的尺寸。
Keras中的LSTM仅精确定义了一个LSTM块,其单元长度为单位长度。
直接正确设置output_size = 10
(like in this comment)可以产生480个参数。