TensorFlow中LSTM单元RNN输出变量维度为何多1?
解答:LSTM Kernel维度为何多了1?
嘿,其实这个问题的核心是你没把输入特征维度和LSTM内部的权重计算逻辑结合起来看~我来给你拆解清楚:
首先,先明确TensorFlow里BasicLSTMCell的kernel是怎么定义的:LSTM内部有4个核心计算模块——输入门、遗忘门、输出门,还有候选细胞状态($\tilde{C}_t$),每个模块都需要一组权重来计算。为了高效计算,TensorFlow把这4组权重合并成了一个大的kernel矩阵,所以第二个维度是4*隐藏单元数(也就是你说的$4*80=320$),这部分你理解的没错。
那第一个维度为什么是81而不是80呢?原因在这里:
LSTM每个时间步的计算,是把**上一步的隐藏状态($h_{t-1}$,维度80)和当前时间步的输入($x_t$,维度1)**拼接在一起,得到一个总维度为$80+1=81$的向量,然后用这个大向量去乘kernel矩阵,得到4个门+候选状态的总输出。
对应你的代码:
- 输入
nlu_input的shape是[4,1607,1],最后一维的1就是每个时间步的输入特征维度 - 隐藏单元数是80,所以拼接后的向量维度是$1+80=81$
- 因此kernel的形状就是
(81, 320)——第一个维度是输入特征+隐藏状态的总维度,第二个维度是4个门各自的输出维度之和
举个验证例子:如果你把输入改成shape=[4,1607,5](特征维度5),那kernel的第一个维度就会变成$5+80=85$,第二个维度还是320,你可以试试修改代码确认这个规律~
内容的提问来源于stack exchange,提问作者Atsu
相关产品推荐
相关产品推荐

