<p>除了已经介绍的细节外,我还想阐明计算和连接的一些更精细的方面</p>
<p>权重矩阵<code>W_f</code>实际上由两个并排连接的权重矩阵组成,即沿轴=1,每个权重矩阵处理前一时间步激活(<code>htminus1</code>)和当前输入(<code>xt</code>)。然而,表示法<code>[htminus1, xt]</code>表示通过堆叠(即沿轴=0)将<code>htminus1</code>和<code>xt</code>垂直串联而获得的矩阵</p>
<p>这些忽略偏差的矩阵计算可以这样表示-
<a href="https://i.stack.imgur.com/6oLIc.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/6oLIc.png" alt="LSTM matrix calculations"/></a></p>
<p>了解这些计算是如何在tensorflow LSTM模型中进行的也是一个信息。下面的代码块只包含与此处讨论相关的主要计算,因为完整的代码如下<a href="https://github.com/keras-team/keras/blob/5a7a789ee9766b6a594bd4be8b9edb34e71d6500/keras/layers/recurrent.py#L1689" rel="nofollow noreferrer">link</a></p>
<pre class="lang-py prettyprint-override"><code># gate layers calculations on current inputs
x_i = K.dot ( inputs_i , self.kernel_i )
x_f = K.dot ( inputs_f , self.kernel_f )
x_c = K.dot ( inputs_c , self.kernel_c )
x_o = K.dot ( inputs_o , self.kernel_o )
# adding biases
if self.use_bias :
x_i = K.bias_add ( x_i , self.bias_i)
x_f = K.bias_add ( x_f , self.bias_f)
x_c = K.bias_add ( x_c , self.bias_c)
x_o = K.bias_add ( x_o , self.bias_o)
# gate layers calculations using previous output -> h_tm1 i.e htminus1
i = self.recurrent_activation (x_i + K.dot(h_tm1 , self.recurrent_kernel_i) )
f = self.recurrent_activation (x_f + K . dot( h_tm1 , self.recurrent_kernel_f) )
c = f * c_tm1 + i * self.activation (x_c + K.dot(h_tm1, self.recurrent_kernel_c) )
o = self.recurrent_activation (x_o + K.dot(h_tm1 , self.recurrent_kernel_o) )
</code></pre>