Tensorflow rnn api 阅读笔记

本文是关于TensorFlow RNN API的阅读笔记,重点介绍了dynamic_rnn、bidirectional_dynamic_rnn以及static前缀的API。dynamic_rnn允许动态处理序列长度,而static前缀的API则要求固定长度。tf.nn.raw_rnn提供了更高级别的定制化操作。同时,文章还探讨了dynamic_rnn的内部执行逻辑,包括如何根据sequence_length动态控制循环次数。
摘要由CSDN通过智能技术生成

Tensorflow rnn api 阅读笔记

概述

tensorflow rnn api
rnn api 是用于将rnncell按照时间步骤进行自环的

常用rnn

  1. 带有static前缀的api要求输入的序列具有固定长度。  
  2. 带有dynamic前缀的api可以选择输入一个sequence_length(可以是一个list)参数,该参数对应的是输入sequence的序列长度,用来动态处理sequence的长度(代码中是设置了一个专门记录序列长度的tensor,控制rnn自环的轮数)。
  3. tf.nn.raw_rnn是原始的rnn api,能够使用该api实现各种定制化的操作。很好用。
    • tf.nn.static_rnn
    • tf.nn.static_state_saving_rnn
    • tf.nn.static_bidirectional_rnn
    • tf.nn.stack_bidirectional_dynamic_rnn
    • tf.nn.dynamic_rnn
    • tf.nn.dynamic_bidirectional_rnn
    • tf.nn.raw_rnn

dynamic_rnn

    def dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None,
                    dtype=None, parallel_iterations=None, swap_memory=False,
                    time_major=False, scope=None):
    """Creates a recurrent neural network specified by RNNCell `cell`.

    Performs fully dynamic unrolling of `inputs`.

    Example:

    ```python
    # create a BasicRNNCell
    rnn_cell = tf.nn.rnn_cell.BasicRNNCell(hidden_size)

    # 'outputs' is a tensor of shape [batch_size, max_time, cell_state_size]

    # defining initial state
    initial_state = rnn_cell.zero_state(batch_size, dtype=tf.float32)

    # 'state' is a tensor of shape [batch_size, cell_state_size]
    outputs, state = tf.nn.dynamic_rnn(rnn_cell, input_data,
                                        initial_state=initial_state,
                                        dtype=tf.float32)
    ```

上下两个为官方给的使用样例

  # create 2 LSTMCells
  rnn_layers = [tf.nn.rnn_cell.LSTMCell(size) for size in [128, 256]]

  # create a RNN cell composed sequentially of a number of RNNCells
  multi_rnn_cell = tf.nn.rnn_cell.MultiRNNCell(rnn_layers)

  # 'outputs' is a tensor of shape [batch_size, max_time, 256]
  # 'state' is a N-tuple where N is the number of LSTMCells containing a
  # tf.contrib.rnn.LSTMStateTuple for each cell
  outputs, state = tf.nn.dynamic_rnn(cell=multi_rnn_cell,
                                     inputs=data,
                                     dtype=tf.float32)
  Args:
    cell: An instance of RNNCell.
    inputs: The RNN inputs.
      If `time_major == False` (default), this must be a `Tensor` of shape:
        `[batch_size, max_time, ...]`, or a nested tuple of such
        elements.
      If `time_major == True`, this must be a `Tensor` of shape:
        `[max_time, batch_size, ...]`, or a nested tuple of such
        elements.
      This may also be a (possibly nested) tuple of Tensors satisfying
      this property.  The first two dimensions must match across all the inputs,
      but otherwise the ranks 
TensorFlow中的RNN(循环神经网络)是一种用于处理序列数据的机器学习模型。RNN是一种具有循环连接的神经网络,它在处理序列数据时可以考虑上下文信息。 在TensorFlow中,您可以使用tf.keras.layers.RNN类来创建RNN模型。该类提供了许多常见的RNN单元类型,如SimpleRNN、LSTM和GRU。您可以选择适合您任务需求的单元类型,并通过调整参数来配置RNN模型。 以下是一个使用TensorFlow创建简单RNN模型的示例代码: ```python import tensorflow as tf # 定义输入数据 inputs = tf.random.normal([32, 10, 8]) # 输入数据维度为[batch_size, sequence_length, input_dim] # 创建RNN模型 rnn = tf.keras.layers.SimpleRNN(units=16, return_sequences=True) outputs = rnn(inputs) # 打印模型输出 print(outputs.shape) # 输出数据维度为[batch_size, sequence_length, units] ``` 在这个示例中,我们首先定义了输入数据`inputs`,其维度为[batch_size, sequence_length, input_dim],其中`batch_size`表示批量大小,`sequence_length`表示序列长度,`input_dim`表示每个时间步的输入维度。 然后,我们使用`tf.keras.layers.SimpleRNN`创建了一个简单的RNN模型。我们指定了RNN单元的数量为16,并设置`return_sequences=True`以便返回完整的序列输出。 最后,我们将输入数据传递给RNN模型并得到输出`outputs`。输出的维度为[batch_size, sequence_length, units],其中`units`表示RNN单元的数量。 这只是一个简单的示例,您可以根据您的任务需求来调整模型的参数和网络结构。TensorFlow提供了丰富的API和文档,您可以进一步探索和学习RNN模型的更多功能和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值