tensorflow学习之bidirectional_dynamic_rnn使用详解

版权声明:微信公众号:数据挖掘与机器学习进阶之路。本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013230189/article/details/82817055

tf.nn.bidirectional_dynamic_rnn

tf.nn.bidirectional_dynamic_rnn(

    cell_fw,
    cell_bw,
    inputs,
    sequence_length=None,
    initial_state_fw=None,
    initial_state_bw=None,
    dtype=None,
    parallel_iterations=None,
    swap_memory=False,
    time_major=False,
    scope=None
)

创建一个双向循环神经网络的动态版本。

接受输入并且构建独立的前向和后向RNNs。前向和后向cell的input_size必须匹配。默认情况下,两个方向的初始状态为0(但可以自己设置),并且不返回任何中见状态—如果给定序列的长度,则网络完全展开。如果长度没给定,则完全不展开。

参数:

cell_fw:一个RNNCell实例,用于前向。

cell_bw: 一个RNNCell实例,用于后向。

  • Inputs:RNN的输入。如果time_major==False(默认),张量的形状为:[batch_size,max_time,…]或这些元素的嵌套的tuple。如果time_major==True,张量的形状为:[max_time,batch_size,…]或者这些元素的嵌套的tuple。也可能是满足此属性的Tensors(可能是嵌套的)元组。每个时间步的单元输入的是张量或者是维度为[batch_size,…]的张量的tuple
  • sequence_length:可选参数。一个大小为[batch_size]的int32/int64类型向量。表示每个输入样本长度,如时间步长。更多的考虑到性能而不是正确性。
  • Initial_state:_fw:可选参数。一个针对前向RNN的初始状态。[batch_size, cell_fw.state_size]
  • Initial_state_bw: 可选参数。一个针对后向RNN的初始状态。[batch_size, cell_fw.state_size]
  • dtype:初始状态和预期输出的数据类型。
  • parallel_iteratioins:默认为32。并行运行的迭代次数。用于那些没有任何时间依赖性并且可以并行运行的操作。该参数是使用空间换时间。值>1则使用更多内存但占用更少时间。使用较小的值则使用较少内存但计算时间较长。
  • swap_memory:透明地交换前向推理中产生的张量,但对于后向传播,需要从GPU到CPU。这允许训练通常不适合单个GPU的RNN,具有非常小的性能损失。
  • time_major:指定输入和输出张量的形状格式。如果为True,张量必须形如[max_time,batch_size,depth].如果为False,张量必须形如:[batch_size,max_time,depth]。使用time_major=True会更有效,因为它避免了RNN计算开始和结束时的转置。但是,大多数Tensorflow数据都是batch_size为major的数据,因此,默认情况下,此函数以batch-major形式接受输入和输出。
  • scope:用于创建子图的VariableScope,默认是”rnn”。

返回:

一个(outputs,output_states)元组,其中:

  • outputs:一个(output_fw,output_bw)元组,包含前向和后向rnn输出的张量。如果time_major=False(默认的),output_fw是一个形如[batch_size,max_time,cell_fw.output_size]的张量,output_bw是一个形如[batch_size,max_time,cell_bw.output_size]的张量。如果time_major==True,output_fw是一个形如[max_time, batch_size,cell_fw.output_size]的张量,output_bw是一个形如[max_time, batch_size,cell_bw.output_size]的张量。与bidirectioinal_rnn不同,它返回一个元组而不是单个连接的Tensor。如果首选连接的,则前向和后向输出可连接为tf.concat(outputs,2)。
  • output_states:一个(output_state_fw,output_state_bw)的元组,包含bidirectional rnn的前向和后向的最终状态。

 

代码实例:

import tensorflow as tf


max_time=40 #最大时间步长为40
batch_size=10 #批处理大小
depth=128 #输入层神经元数量,如词向量维度
lstm_fw_cell=tf.nn.rnn_cell.BasicLSTMCell(100) #前向100个隐藏神经元
lstm_bw_cell=tf.nn.rnn_cell.BasicLSTMCell(200) #后向200个隐藏神经元
inputs=tf.Variable(tf.random_normal([max_time,batch_size,depth]))
outputs,output_states=tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell,lstm_bw_cell,inputs=inputs,dtype=tf.float32,time_major=True)


print(outputs[0].shape) #(40, 10, 100),前向RNN
print(outputs[1].shape) #(40, 10, 200),后向RNN
print(output_states[0].c.shape) #(10, 100)前向RNN的c状态
print(output_states[0].h.shape) #(10, 100)前向RNN的h状态
print(output_states[1].c.shape) #(10, 200)后向向RNN的c状态
print(output_states[1].h.shape) #(10, 200)后向向RNN的h状态

 

 

猜你喜欢

转载自blog.csdn.net/u013230189/article/details/82817055
今日推荐