Lstm输入参数详细解释:
比如建立双层lstm,以mnist数据集来进行叙述:
我们知道mnist数据集,是28*28;用lstm训练mnist数据集过程;
def DoubleLSTM(train_x,train_y,valid_x,valid_y,test_x,test_y):
#创建模型
model=Sequential()
model.add(LSTM(64,input_shape=(28,28),return_sequences=True)) #返回所有节点的输出
model.add(LSTM(32,return_sequences=False)) #返回最后一个节点的输出
model.add(Dense(10,activation='softmax'))
#查看网络结构
model.summary()
输出结果:
Layer (type) Output Shape Param #
=================================================================
lstm_5 (LSTM) (None, 28, 64) 23808
_________________________________________________________________
lstm_6 (LSTM) (None, 32) 12416
_________________________________________________________________
dense_5 (Dense) (None, 10) 330
=================================================================
Total params: 36,554
Trainable params: 36,554
Non-trainable params: 0
model.add(LSTM(64,input_shape=(28,28),return_sequences=True)) #64表示,输出的维度是64,也即是隐层维度,input_shape(time_step,feature_dim)中,time_step表示有多少个作为输入,feature_dim表示每次输入的一维向量。return_sequences=True表示返回所有节点的输出。
例如:计算输出参数
第一层model.add(LSTM(64,input_shape=(28,28),return_sequences=True)),它的参数很好计算。可以知道隐层是(1 * 64),输入向量(1 * 28),则联合输入是(1 * (64+28)),因为输出是(1 * 64),则W的参数(92 * 64),再加上b的参数(1 * 64).即一个门的参数是(92 * 64)+64=5952,又因为有3个门和1个细胞状态更新,即5952 * 4=23808,计算完毕。