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基础教程之元组操作使用详解
Mar 25 Python
python监控网卡流量并使用graphite绘图的示例
Apr 27 Python
python logging类库使用例子
Nov 22 Python
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
python验证身份证信息实例代码
May 06 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
django orm模块中的 is_delete用法
May 20 Python
python生成word合同的实例方法
Jan 12 Python
python 三种方法提取pdf中的图片
Feb 07 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 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中替换键名的简易方法示例详解
2014/01/07 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
php批量修改表结构实例
2017/05/24 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
javascript 函数调用规则
2009/08/26 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
node中Express 动态设置端口的方法
2017/08/04 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
python结合API实现即时天气信息
2016/01/19 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
python把一个字符串切开的实例方法
2020/09/27 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
化工专业大学生职业生涯规划书
2014/01/14 职场文书
教育技术职业规划范文
2014/03/04 职场文书
售后服务承诺书
2014/03/26 职场文书
演讲稿的写法
2014/05/19 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python