Python 3.x 为什么这些LSTM参数计数不同?

Python 3.x 为什么这些LSTM参数计数不同?,python-3.x,keras,lstm,Python 3.x,Keras,Lstm,我正在为一份报告构建一个LSTM,我想总结一下关于它的事情。然而,我已经看到了两种在Keras中构建LSTM的不同方法,它们为参数的数量产生了两个不同的值 我想了解为什么参数会以这种方式不同 这个问题正确地说明了为什么要使用此代码 from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from keras.layers import Embedding from keras.

我正在为一份报告构建一个LSTM,我想总结一下关于它的事情。然而,我已经看到了两种在Keras中构建LSTM的不同方法,它们为参数的数量产生了两个不同的值

我想了解为什么参数会以这种方式不同

这个问题正确地说明了为什么要使用此代码

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(256, input_dim=4096, input_length=16))
model.summary()
结果显示4457472个参数

据我所知,以下两个LSTM应该是相同的

m2 = Sequential()
m2.add(LSTM(1, input_dim=5, input_length=1))
m2.summary()

m3 = Sequential()
m3.add(LSTM((1),batch_input_shape=(None,5,1)))
m3.summary()
但是,
m2
产生
28
参数,而
m3
产生
12
参数为什么?

如何为一个具有5维输入的1单位LSTM计算12?
包括警告信息。希望对你有帮助

输出

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 256)               4457472   
=================================================================
Total params: 4,457,472
Trainable params: 4,457,472
Non-trainable params: 0
_________________________________________________________________

Warning (from warnings module):
  File "difparam.py", line 11
    m2.add(LSTM(1, input_dim=5, input_length=1))
UserWarning: The `input_dim` and `input_length` arguments in recurrent layers are deprecated. Use `input_shape` instead.

Warning (from warnings module):
  File "difparam.py", line 11
    m2.add(LSTM(1, input_dim=5, input_length=1))
UserWarning: Update your `LSTM` call to the Keras 2 API: `LSTM(1, input_shape=(1, 5))`
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 1)                 28        
=================================================================
Total params: 28
Trainable params: 28
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_3 (LSTM)                (None, 1)                 12        
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
_________________________________________________________________

m2是基于堆栈溢出问题的信息构建的,m3是基于YouTube构建的。

因为正确的值是
input\u dim=1
input\u length=5


它甚至写在您收到的警告中,
m2
的输入形状与
m3
中使用的形状不同:

用户警告:更新对keras2api的
LSTM
调用:
LSTM(1,input_-shape=(1,5))


强烈建议您使用警告中的建议

m2
似乎说4x((1×5)+(1^2)+1)=4x(1+5+1)=4x7=28<代码>m3毫无意义。好的
m3.添加(LSTM((1),批处理输入形状=(无,1,5))
给出与
m2相同的参数。添加(LSTM(1,输入尺寸=5,输入长度=1))
。这个警告对我来说很神秘,这很糟糕。对于长度为1.5的LSTM,您不会获得任何收益。重点是理解参数差异<代码>输入长度实际上是可选的。在
m3
中,
None
实际上表示输入长度(即观察值)。它不是一个与参数相关的值。我试图理解,与其他NN类型相比,param计数是一种糟糕的方式。不,在
batch\u-input\u-shape=(无,1,5)
中,长度为1->
batch\u-input\u-shape=(样本,长度,特征)