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实现k均值算法示例(k均值聚类算法)
Mar 16 Python
gearman的安装启动及python API使用实例
Jul 08 Python
python中sleep函数用法实例分析
Apr 29 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
python函数形参用法实例分析
Aug 04 Python
基于Python的文件类型和字符串详解
Dec 21 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
Python生成短uuid的方法实例详解
May 29 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
python import 上级目录的导入
Nov 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&mysql(四)
2006/10/09 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
Javascript中的变量使用说明
2010/05/18 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
使用tensorflow实现AlexNet
2017/11/20 Python
python实现图片彩色转化为素描
2019/01/15 Python
Python面向对象进阶学习
2019/05/21 Python
解析python的局部变量和全局变量
2019/08/15 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
毕业生实习鉴定
2013/12/11 职场文书
组织关系转移介绍信
2014/01/16 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
家长评语怎么写
2014/12/30 职场文书
惊涛骇浪观后感
2015/06/05 职场文书