tensorflow学习之static_bidirectional_rnn使用详解

tf.nn.static_bidirectional_rnn

Aliases:

  • tf.contrib.rnn.static_bidirectional_rnn
  • tf.nn.static_bidirectional_rnn

创建双向循环神经网络。

与单向循环神经网络类似,只不过双向循环神经网络同时接受前向和反向的RNN神经元,最终对前向和反向的输出进行深度级联,输出的格式如: [time][batch][cell_fw.output_size + cell_bw.output_size].前向和反向神经元的input_size必须匹配。默认情况下,前向和反向的初始状态为0,并且不反回任何中间状态。如果给定序列的长度,网络完全展开,如果没有给定长度,则不展开。

tf.nn.static_bidirectional_rnn(

    cell_fw,

    cell_bw,

    inputs,

    initial_state_fw=None,

    initial_state_bw=None,

    dtype=None,

    sequence_length=None,

    scope=None

)

参数说明:

  • cell_fw:前向神经元,如BasicRNNCell.
  • cell_bw:反向神经元
  • input:网络输入,一个长度为T的list,list中的每个Tensor元素shape为[batch_size,input_size]
  • initial_state_fw:可选参数。前向RNN的初始RNN,必须是合适类型的Tensor以及shape为[batch_size,cell_fw.state_size]。
  • Initial_state_bw:可选参数。同initial_state_fw。
  • dtype:初始状态的数据类型。
  • sequence_length:一个int32/int64的向量,长度为[batch_size],包含每个序列的实际长度。
  • scope:默认为”bidirectional_rnn

返回:

一个(outputs,output_state_fw,output_state_bw)的元组,其中,outputs是一个长度为T的list,list中的每个元素对应每个时间步的输出,它们是深度级联的前向和反向输出。output_state_fw是前向RNN的最终状态,output_state_bw是反向RNN的最终状态。

代码实例:

import tensorflow as tf

fw_cell = tf.nn.rnn_cell.BasicRNNCell(128)
bw_cell = tf.nn.rnn_cell.BasicRNNCell(256)
inputs = tf.Variable(tf.random_normal([100, 40, 300]))  # [batch_size,timestep,embedding_dim]
inputs = tf.unstack(inputs, 40, axis=1)
outputs, fw, bw = tf.nn.static_bidirectional_rnn(fw_cell, bw_cell, inputs, dtype=tf.float32)
print(len(outputs))  # 40,40个时间步
print(outputs[0].shape)  # (100, 384),每个时间步的输出神经元为384=128+256
print(outputs[1].shape)  # (100, 384)
print(fw.shape)  # (100, 128),前向RNN隐藏层
print(bw.shape)  # (100, 128),后向RNN传播隐藏层

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值