tf.nn.rnn_cell.LSTMCell注意的地方+tf.nn.dynamic_rnn

tf.nn.rnn_cell.LSTMCell

https://www.cnblogs.com/lovychen/p/9368390.html
这一篇讲解了RNN、LSTM的结构(计算公式链接)
两个注意地方:
1)[H,X] * W后和B维度不同, 如何相加

tensorflow代码中,用的这个 nn_ops.bias_add(gate_inputs, self._bias),这个函数的计算方法是,让每个 batch 的输出值,都加上这个 B;
所以维度不同可以相加:【batch_size,Hidden_size】,【Hidden_size】

2)class BasicRNNCell(LayerRNNCell)或者class BasicLSTMCell(LayerRNNCell)是一个batch,一个时刻的计算,若计算所有时刻,则循环执行以下代码,num_step(句长)次; tensorflow 已经封装好了,不需要我们写;


上一篇写tf.nn.rnn_cell.MultiRNNCell的时候,我没留意到tf.nn.rnn_cell.LSTMCell的输入是什么。

我只学到了tf.nn.rnn_cell.LSTMCell是一层循环神经网络,然后我们可以将多层网络放到一个列表里作为tf.nn.rnn_cell.MultiRNNCell的参数。所以我只注意到tf.nn.rnn_cell.MultiRNNCell起到容器的作用。

"""Run one step of LSTM.
    Args:
      inputs: input Tensor, 2D, batch x num_units.
      A `2-D, [batch x output_dim]`, Tensor representing the output of the
        LSTM after reading `inputs` when previous state was `state`.
"""

学东西和看代码要仔细


可以发现它缺少了时序的维度,就是循环的time step。
下面先看看tf.nn.rnn_cell.LSTMCell的参数:链接
这篇讲得非常清晰,学习就是要互相借鉴。
参数num_units是隐藏状态的特征维数


tf.nn.dynamic_rnn

为了实现时序维度,tf.nn.dynamic_rnn 函数是tensorflow封装的用来实现递归神经网络的函数。

reference1)解释了tf.nn.dynamic_rnn的返回值及处理。

reference2)解释了tf.nn.dynamic_rnn的参数。含代码例子。

cell:LSTM、GRU等的记忆单元。cell参数代表一个LSTM或GRU的记忆单元,也就是一个cell。例如,cell = tf.nn.rnn_cell.LSTMCell((num_units)

这里可以是tf.nn.rnn_cell.MultiRNNCell。

其中 h t h_t ht与outputs中对应的最后一个时刻(即最后一个cell)的输出相等。

sequence_length:是一个list,假设你输入了三句话,且三句话的长度分别是5,10,25,那么sequence_length=[5,10,25]。

这篇没有讲到initial_state参数,网上也难查,应用到在看情况。
3reference)有一点涉及

rnn_cell = tf.nn.rnn_cell.BasicRNNCell(hidden_size)
initial_state = rnn_cell.zero_state(batch_size, dtype=tf.float32)
initial_state是初始隐藏状态h0: shape=(batch_size, multi_cell.state_size)


tf.nn.bidirectional_dynamic_rnn

不难理解:
https://blog.csdn.net/qq_35203425/article/details/81332807
https://zhuanlan.zhihu.com/p/101343700

tf.nn.static_bidirectional_rnn

输入和输出的维度有点不同。
https://zhuanlan.zhihu.com/p/101560470


补充

tf.nn.rnn_cell.LSTMCell参数中
forget_bias: 在训练开始时,为了减小遗忘尺度,遗忘门的偏置默认初始化为1.0,当从已经训练好的CudnnLSTM的checkpoints文件恢复时,这个值必须手动设置为0.

你可能感兴趣的:(TensorFlow,tensorflow,自然语言处理,1024程序员节)