转载自:https://blog.csdn.net/zhylhy520/article/details/86364789

首先我们了解一下函数的参数

bidirectional_dynamic_rnn(cell_fw, # 前向RNNcell_bw, # 后向RNNinputs, # 输入sequence_length=None,# 输入序列的实际长度(可选,默认为输入序列的最大长度)initial_state_fw=None,  # 前向的初始化状态(可选)initial_state_bw=None,  # 后向的初始化状态(可选)dtype=None, # 初始化和输出的数据类型(可选)parallel_iterations=None,swap_memory=False,time_major=False,scope=None)

值得注意的是,当inputs的张量形状为[batch_size,max_len,embeddings_num]时,time_major = False。当inputs的形状为[max_len,batch_size,embeddings_num]时,time_major = True。一般我们将输入的格式为[batch_size,max_len,embeddings_num],因此time_major的默认值为False。

函数的输入与tf.nn.dynamic_rnn()相似,由(outputs,outputs_states)组成。

outputs为(output_fw, output_bw),是一个包含前向cell输出tensor和后向cell输出tensor组成的元组。当time_major = False时,output_fw和output_bw的形状为[batch_size,max_len,hiddens_num]。在此情况下,最终的outputs可以用tf.concat([output_fw, output_bw],-1)或tf.cocat([output_fw, output_bw],2),这里面的[output_fw, output_bw]可以直接用outputs进行代替。关于tf.concat可以参考https://blog.csdn.net/leviopku/article/details/82380118
    output_states为(output_state_fw, output_state_bw),包含了前向和后向最后的隐藏状态的组成的元组。 output_state_fw和output_state_bw的类型为LSTMStateTuple,由(c,h)组成,分别代表memory cell 和hidden state.

笔者最近做的两个项目分别为基于Bilstm的文本分类和中文实体抽取。对于文本分类来说,需要最后一个time_step的输出,而中文实体抽取则需要最终的outputs,即所有time_step的输出。

#文本分类可以由以下方式得到最后的输入状态

outputs, outputs_state = tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell_m, lstm_bw_cell_m, embedding_inputs,time_major = False,dtype = tf.float32)output_fw = outputs[0]output_bw = outputs[1]#原形状为[batch_size,max_len,hidden_num]output_fw = tf.transpose(output_fw,[1,0,2])#现在形状为[max_len,batch_size,hidden_num]output_bw = tf.transpose(output_bw,[1,0,2])outputs1 = [output_fw,output_bw]lstmoutputs = tf.concat(outputs1, 2)#连接后形状为[max_len,batch_size,2*hidden_num]last = lstmoutputs[-1]#最后一个time_step的输出,为[batch_size,2*hidden_num]# 中文实体抽取(output_fw_seq, output_bw_seq), _ = tf.nn.bidirectional_dynamic_rnn(cell_fw=cell_fw,cell_bw=cell_bw,inputs=self.word_embeddings,sequence_length=self.sequence_lengths,dtype=tf.float32)output = tf.concat([output_fw_seq, output_bw_seq],axis=-1)  # time_major = False,所以输入为[batch_size,time_step,embedding_dim],所以这样连接,相当于 axis = 2

tf.nn.bidirectional_dynamic_rnn()函数详解相关推荐

  1. tf.nn.conv2d()函数详解(strides与padding的关系)

    tf.nn.conv2d()是TensorFlow中用于创建卷积层的函数,这个函数的调用格式如下: def conv2d(input: Any,filter: Any,strides: Any,pad ...

  2. tf.nn.softmax参数详解以及作用

    tf.nn.softmax参数详解以及作用 参考地址:https://zhuanlan.zhihu.com/p/93054123 tf.nn.softmax(logits,axis=None,name ...

  3. nn.Linear()函数详解

    nn.Linear()函数详解 torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)[原文地址] ...

  4. pytorch之torch.nn.Conv2d()函数详解

    文章目录 一.官方文档介绍 二.torch.nn.Conv2d()函数详解 参数详解 参数dilation--扩张卷积(也叫空洞卷积) 参数groups--分组卷积 三.代码实例 一.官方文档介绍 官 ...

  5. 【PyTorch】nn.Conv2d函数详解

    文章目录 1. 函数语法格式 2. 参数解释 3. 尺寸关系 4. 使用案例 5. nn.functional.conv2d 1. 函数语法格式 CONV2D官方链接 torch.nn.Conv2d( ...

  6. tf.nn.sampled_softmax_loss用法详解

    tensorflow中具体的函数说明如下: tf.nn.sampled_softmax_loss(weights, # Shape (num_classes, dim) - floatXXbiases ...

  7. tf.nn.dynamic_rnn的详解

    tf.nn.dynamic_rnn 其和tf.nn.static_rnn,在输入,输出,参数上有很大的区别,请仔细阅读比较 tf.nn.dynamic_rnn(cell,inputs,sequence ...

  8. nn.Flatten()函数详解及示例

    torch.nn.Flatten(start_dim=1, end_dim=- 1) 作用:将连续的维度范围展平为张量. 经常在nn.Sequential()中出现,一般写在某个神经网络模型之后,用于 ...

  9. Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作...

    使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...

最新文章

  1. 开源 | IBM、哈佛共同研发:Seq2Seq模型可视化工具
  2. Linux基础知识题解答(一)
  3. 单相桥式相控整流电路multisim仿真_单相半波整流 全波整流 桥式整流
  4. 什么是Ajax和JSON,它们的优缺点
  5. SAP ui5 单元测试框架 - OPA
  6. php获取表所有数据类型,php excel 导入 导入三级分类 表格应该怎么设计才能得到想要的数据格式?...
  7. vue 指令 v-on
  8. Bailian2738 实数加法【数学】
  9. java 判断qq_检测QQ号码是否存在
  10. wifi信号衰减与距离关系_wifi无线信号传输衰减间隔核算公式
  11. python算方差_Python求均值,方差,标准差的实例
  12. DOM 详细 一篇就够【重点】
  13. 《炬丰科技-半导体工艺》柠檬酸清洗液对金属表面污染物去除效果评价
  14. 小型酒店管理系统(Vue+SpringBoot)(持续更新)
  15. 怎样调整计算机视角,电脑调节不了CAD极轴角度怎样解决|电脑中调节CAD极轴角度的方法...
  16. 电流模架构Bandgap设计与仿真
  17. PTA 7-2 评委打分
  18. CocosCreator-精灵动态加载图片资源,实例化精灵
  19. 域名解析产品——HTTPDNS使用教程
  20. Unity中的万向节死锁

热门文章

  1. android scalex中心,androidmatrix android怎么算matrix中心点
  2. 移动网络安全_中国移动研究院威胁情报区块链应用获区块链技术网络安全应用创新大赛全国一等奖...
  3. 一个大图切成几个小图加载速度更快_谷歌SEO页面速度的重要性
  4. 51汇编与c语言混合编程,C51与汇编混合编程详解
  5. scala 写入文件_Scala文件IO –写入文件,读取文件
  6. couchdb 安装_如何在Ubuntu上安装CouchDB –分步指南
  7. primefaces_Primefaces命令按钮
  8. easymock使用方法_EasyMock最终方法– PowerMock,JUnit 4,TestNG
  9. scala方法中的变量_Scala变量,变量范围,字段变量,方法参数示例
  10. ROS的学习(八)ROS的服务