Tensorflow与RNN、双向LSTM等的踩坑记录及解决
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的信息瓶颈的解决
如果在时间步的最后输出,则可能会导致开始的一些字符被遗忘门给遗忘。
所以这里就对每个时间步的输出做出了处理,
主要处理有:
1、拼接:把所有的输出拼接在一起。
2、Average
3、Pooling
(资源库 www.zyku.net)
原文链接:https://zhuanlan.zhihu.com/p/36743184
上一篇:Python使用pydub模块转换音频格式以及对音频进行剪辑
栏 目:Python教程
本文标题:Tensorflow与RNN、双向LSTM等的踩坑记录及解决
本文地址:https://www.zyku.net/python/11133.html
您可能感兴趣的文章
- 03-31教你怎么用Python操作MySQL数据库
- 03-01苹果12开启辅助触控方法
- 03-15荣耀50se设置网速显示步骤方法
- 03-12WordPress定时发布文章/解决定时发布
- 11-16oppo手机怎么限时应用
- 02-08华为nova8修改显示语言教程
- 01-31小米air2pro配对教程
- 07-05Linux timeconfig命令
- 01-19百万超人答题-百万超人答题应用软件功
- 02-08python3.7.2 tkinter entry框限定输入
- 12-06苹果12地震预警功能在哪
- 03-31Python图片检索之以图搜图
- 12-31小米12怎么开启USB调试模式
- 02-02opporeno5手机开启三指分屏功能方法
- 11-17tt语音注销账号步骤介绍
- 01-11鸿铭阅读-鸿铭阅读应用软件功能介绍
- 01-10易趣镜子-易趣镜子应用软件功能介绍
- 07-28Linux中ftp不能上传文件/目录的解决办
- 09-16小米手环如何还原出厂设置
- 01-31红米note9应用锁使用方法
最近更新
阅读排行
猜你喜欢
- 07-07Textarea输入字数限制实例(兼容iOS&安
- 01-11车马动车主端-车马动车主端应用软件功
- 06-25PHP如何将float转int
- 02-23DedeCMS会员文章被评论后自动发短消息
- 12-31i紫金-i紫金应用软件功能介绍
- 08-13抖音视频聊天开启美颜方法
- 01-11一年级下册数学帮-一年级下册数学帮应
- 01-11手账日记-手账日记应用软件功能介绍
- 06-25阿里云
- 12-14华为p50pro如何设置悬浮导航