Tensorflow与RNN、双向LSTM等的踩坑记录及解决


Posted in Python onMay 31, 2021

1、tensorflow(不定长)文本序列读取与解析

tensorflow读取csv时需要指定各列的数据类型。

但是对于RNN这种接受序列输入的模型来说,一条序列的长度是不固定。这时如果使用csv存储序列数据,应当首先将特征序列拼接成一列。

例如两条数据序列,第一项是标签,之后是特征序列

[0, 1.1, 1.2, 2.3] 转换成 [0, '1.1_1.2_2.3']

[1, 1.0, 2.5, 1.6, 3.2, 4.5] 转换成 [1, '1.0_2.5_1.6_3.2_4.5']

这样每条数据都只包含固定两列了。

读取方式是指定第二列为字符串类型,再将字符串按照'_'分割并转换为数字。

关键的几行代码示例如下:

def readMyFileFormat(fileNameQueue):
    reader = tf.TextLineReader()
    key, value = reader.read(fileNameQueue)

    record_defaults = [["Null"], [-1], ["Null"], ["Null"], [-1]]
    phone1, seqlen, ts_diff_strseq, t_cod_strseq, userlabel = tf.decode_csv(value, record_defaults=record_defaults)
    ts_diff_str = tf.string_split([ts_diff_strseq], delimiter='_')
    t_cod_str = tf.string_split([t_cod_strseq], delimiter='_')
    # 每个字符串转数字
    Str2Float = lambda string: tf.string_to_number(string, tf.float32)
    Str2Int = lambda string: tf.string_to_number(string, tf.int32)
    ts_diff_seq = tf.map_fn(Str2Float, ts_diff_str.values, dtype = tf.float32) # 一定要加上dtype,且必须与fn的输出类型一致
    t_cod_seq = tf.map_fn(Str2Int, t_cod_str.values, dtype = tf.int32)

2、时序建模的序列预测、序列拟合、标签预测,及输入数据格式

序列预测、拟合的“标签”都是序列本身,区别是未来时刻或者是当前时刻,当前时刻的拟合任务类似于antoencoder的reconstruction

标签预测常见于语言学建模,有单词级标签的分词与整句标签的情感分析,前者需要对每一个单词输入都要输出其分词标识,后者是取最后若干输出级联前馈神经网络分类器

keras的输入-输出对:需要将序列拆分成多个片段

序列形式:

按时间列表:static_bidirectional_rnn

多维数组:bidirectional_dynamic_rnn与stack_bidirectional_dynamic_rnn 变长双向rnn的正确使用姿势

3、多任务设置及相应的输出向量划分

对于标签预测任务,按需取输出即可

对于序列预测、拟合:

双向lstm:通常用于拟合。但如果需要捕捉动态信息,尽管需要序列完整输入,则仍可以加上正向预测与反向预测

单向lstm:拟合与预测

4、zero padding

后一般需要通过tf.boolean_mask()隔离这些零的影响,函数输入包括数据矩阵和补零位置的指示矩阵。

5、get_shape()方法

与 tf.shape() 类型区别,前者得到一个list,后者得到一个tensor

6、双向LSTM的信息瓶颈的解决

Tensorflow与RNN、双向LSTM等的踩坑记录及解决

如果在时间步的最后输出,则可能会导致开始的一些字符被遗忘门给遗忘。

所以这里就对每个时间步的输出做出了处理,

主要处理有:

1、拼接:把所有的输出拼接在一起。

2、Average

3、Pooling

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
python交互式图形编程实例(二)
Nov 17 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python如何实现单链表的反转
Feb 10 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
python topk()函数求最大和最小值实例
Apr 02 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
Python数据类型最全知识总结
May 31 #Python
教你怎么用Python操作MySql数据库
Django集成富文本编辑器summernote的实现步骤
Python基础知识学习之类的继承
May 31 #Python
Django实现聊天机器人
Python趣味挑战之教你用pygame画进度条
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 #Python
You might like
Symfony2安装的方法(2种方法)
2016/02/04 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
浅析从vue源码看观察者模式
2018/01/29 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
Python中函数的用法实例教程
2014/09/08 Python
Linux下Python获取IP地址的代码
2014/11/30 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
音乐教学反思
2014/02/02 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
Python数据结构之队列详解
2022/03/21 Python