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检测lvs real server状态
Jan 22 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
python常用函数与用法示例
Jul 02 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Python基于Socket实现简单聊天室
Feb 17 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
如何用Python徒手写线性回归
Jan 25 Python
TensorFlow的自动求导原理分析
May 26 Python
python字典的元素访问实例详解
Jul 21 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 mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
python从ftp下载数据保存实例
2013/11/20 Python
浅谈python中set使用
2016/06/30 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python实现Flappy Bird源码
2018/12/24 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
java字符串格式化输出实例讲解
2021/01/06 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
应聘编辑职位自荐信范文
2014/01/05 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2019新员工心得体会
2019/06/25 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python