Keras:了解可训练的LSTM参数的数量

时间:2018-06-20 11:23:13

标签: python keras deep-learning lstm recurrent-neural-network

我运行了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权重和一个偏差值组成。

现在用于LSTM层: These answers说:

params = 4 * ((input_size + 1) * output_size + output_size^2)

在我使用input_size = 1output_size = 1的情况下,这对于10个单位中的每个单位仅产生12个参数,总计120个参数。与报告的480相比,误差减少了4倍。我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

params公式适用于整个图层,而不适用于Keras单位。

引用this answer

  

[在Keras中,单位表示LSTM中内部单元的尺寸。

     

Keras中的LSTM仅精确定义了一个LSTM块,其单元长度为单位长度。

直接正确设置output_size = 10like in this comment)可以产生480个参数。