LSTM layer
用于实现长短时记忆网络,它的主要作用是对序列数据进行建模和预测。
- 遗忘门(Forget Gate):根据当前输入和上一个时间步的隐藏状态,计算遗忘门的值。遗忘门的作用是控制哪些信息应该被遗忘,哪些信息应该保留。
- 输入门(Input Gate):根据当前输入和上一个时间步的隐藏状态,计算输入门的值。输入门的作用是控制新的信息应该被添加到隐藏状态中,还是应该替换掉旧的信息。
- 候选记忆单元(Candidate Memory Unit):将遗忘门和输入门的输出相加,得到候选记忆单元的值。候选记忆单元的作用是将新的记忆和旧的记忆结合起来,形成一个新的记忆单元。
- 输出门(Output Gate):根据当前输入和候选记忆单元,计算输出门的值。输出门的作用是决定下一个时间步的隐藏状态应该是什么。
keras.layers.LSTM(units,activation="tanh",recurrent_activation="sigmoid",use_bias=True,kernel_initializer="glorot_uniform",recurrent_initializer="orthogonal",bias_initializer="zeros",unit_forget_bias=True,kernel_regularizer=None,recurrent_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,recurrent_constraint=None,bias_constraint=None,dropout=0.0,recurrent_dropout=0.0,seed=None,return_sequences=False,return_state=False,go_backwards=False,stateful=False,unroll=False,**kwargs
)
参数说明
units
: 整数,表示LSTM层的神经元数量。activation
: 字符串或激活函数对象,表示LSTM层的激活函数。默认为"tanh"。recurrent_activation
: 字符串或激活函数对象,表示LSTM层的循环激活函数。默认为"sigmoid"。use_bias
: 布尔值,表示是否在LSTM层中使用偏置项。默认为True。kernel_initializer
: 初始化器对象,用于初始化LSTM层的权重矩阵。默认为"glorot_uniform"。recurrent_initializer
: 初始化器对象,用于初始化LSTM层的递归权重矩阵。默认为"orthogonal"。bias_initializer
: 初始化器对象,用于初始化LSTM层的偏置项。默认为"zeros"。unit_forget_bias
: 布尔值,表示是否在LSTM层中添加遗忘门的偏置项。默认为True。kernel_regularizer
: 正则化器对象,用于对LSTM层的权重矩阵施加正则化。默认为None。recurrent_regularizer
: 正则化器对象,用于对LSTM层的递归权重矩阵施加正则化。默认为None。bias_regularizer
: 正则化器对象,用于对LSTM层的偏置项施加正则化。默认为None。activity_regularizer
: 正则化器对象,用于对LSTM层的输出施加正则化。默认为None。kernel_constraint
: 约束器对象,用于对LSTM层的权重矩阵施加约束。默认为None。recurrent_constraint
: 约束器对象,用于对LSTM层的递归权重矩阵施加约束。默认为None。bias_constraint
: 约束器对象,用于对LSTM层的偏置项施加约束。默认为None。dropout
: 浮点数,表示LSTM层的丢弃率。默认为0.0。recurrent_dropout
: 浮点数,表示LSTM层的循环丢弃率。默认为0.0。seed
: 整数,表示随机数生成器的种子。默认为None。return_sequences
: 布尔值,表示是否返回整个序列的输出。默认为False。return_state
: 布尔值,表示是否返回最后一个时间步的状态。默认为False。go_backwards
: 布尔值,表示是否反向处理输入序列。默认为False。stateful
: 布尔值,表示是否保持状态以供后续时间步使用。默认为False。unroll
: 布尔值,表示是否展开LSTM层以减少计算复杂性。默认为False。**kwargs
: 其他关键字参数,将传递给底层的TensorFlow操作。
示例
from keras.models import Sequential
from keras.layers import LSTM, Dense#创建一个Sequential模型对象
model = Sequential()#添加一个LSTM层,设置单元数为32,输入形状为(timesteps, input_dim)
model.add(LSTM(units=32, input_shape=(timesteps, input_dim)))#添加一个全连接层(Dense),设置单元数为output_dim,激活函数为softmax
model.add(Dense(units=output_dim, activation='softmax'))# 编译模型,设置损失函数为分类交叉熵(categorical_crossentropy),优化器为Adam,评估指标为准确率(accuracy)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])#使用训练数据(x_train, y_train)进行模型训练,设置迭代次数为10,批量大小为32
model.fit(x_train, y_train, epochs=10, batch_size=32)