Python 3.x 为什么这些LSTM参数计数不同?
我正在为一份报告构建一个LSTM,我想总结一下关于它的事情。然而,我已经看到了两种在Keras中构建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.
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=(样本,长度,特征)
。