关于Keras中LSTM网络连接与参数设置的技术问询
关于LSTM模型连接机制与任务理解的解答
先把你的LSTM模型代码整理如下:
# Instantiating the model model = Sequential() # Input layer model.add(LSTM(30, activation="softsign", return_sequences=True, input_shape=(30, 1))) # Hidden layers model.add(LSTM(12, activation="softsign", return_sequences=True)) model.add(LSTM(12, activation="softsign", return_sequences=True)) # Final Hidden layer model.add(LSTM(10, activation="softsign")) # Output layer model.add(Dense(10))
你的技术疑问解答
1. 最终隐藏层与前一层的连接情况
你的这个理解不准确。原因是前一层LSTM设置了return_sequences=True,它的输出是形状为(None, 30, 12)的序列(每个样本输出30个时间步,每个时间步对应12维隐藏状态)。而最终的LSTM层(默认return_sequences=False)会逐时间步处理这个序列:
- 每个时间步里,最终层的10个LSTM单元都会与前一层对应时间步的12个单元全连接,但同时每个LSTM单元还会接收自身前一个时间步的隐藏状态(循环连接)。
- 更关键的是,LSTM的权重是时间步共享的——所有30个时间步复用同一套权重参数,不是每个时间步单独建连接。所以实际参数数远不止1012=120:每个LSTM单元包含输入门、遗忘门、输出门、候选细胞状态4个组件,每个组件都需要对前层输入(12维)和自身循环状态(10维)的权重,单个单元参数为
(12+10)*4=88,10个单元就是880,再加上4个组件的偏置(104=40),这个LSTM层总参数是920。
2. Dense层与最终隐藏层的连接情况
这个理解完全正确!Dense层是标准全连接层,10个输出单元中的每一个都会与最终隐藏层的10个输出单元建立连接,连接数确实是10*10=100,再加上每个输出单元的偏置(10个),这个Dense层总参数为110。
3. return_sequence参数对输入层与第一个隐藏层连接的影响
不会有任何差异!return_sequence参数只控制当前LSTM层的输出形式:设为True时输出完整时间步序列,设为False时只输出最后一个时间步的隐藏状态。而第一个LSTM层的输入是固定的input_shape=(30,1)(30个时间步,每个时间步1个特征),它的内部连接机制(每个时间步单元与输入特征、自身循环状态的连接)不会受后面层的return_sequence设置影响——不管后面层怎么配置,第一个LSTM层都是按同样的方式处理输入序列的。
关于任务理解的确认与补充
你对样本和任务的理解基本正确:单个训练样本是包含30天BTC价格的序列,输出是未来10天的价格预测。这里补充一个细节:Keras的LSTM要求输入是3维张量,所以单个样本的形状应该是(30, 1)(而非一维的(30,)),也就是每个时间步单独作为一个特征维度,这样模型才能正确识别序列结构。
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

