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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
python如何实现excel数据添加到mongodb
Jul 30 Python
python开发之list操作实例分析
Feb 22 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
python实现计算器简易版
Dec 17 Python
Django自带的用户验证系统实现
Dec 18 Python
django上传文件的三种方式
Apr 29 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方法调用模式与函数调用模式简例
2011/09/20 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP小教程之实现链表
2014/06/09 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
残疾人创业典型事迹
2014/02/01 职场文书
出纳担保书范文
2014/04/02 职场文书
个人先进材料范文
2014/12/30 职场文书
教师自荐信范文
2015/03/06 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
Python内置的数据类型及使用方法
2022/04/13 Python