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缩进和冒号详解
Jun 01 Python
Python max内置函数详细介绍
Nov 17 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Flask框架工厂函数用法实例分析
May 25 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
浅析Python3 pip换源问题
Jan 06 Python
在python image 中实现安装中文字体
May 16 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
python超详细实现完整学生成绩管理系统
Mar 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
php+dbfile开发小型留言本
2006/10/09 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python 列表理解及使用方法
2017/10/27 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
python实现用户名密码校验
2020/03/18 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
县委务虚会发言材料
2014/10/20 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python