使用tensorflow DataSet实现高效加载变长文本输入


Posted in Python onJanuary 20, 2020

DataSet是tensorflow 1.3版本推出的一个high-level的api,在1.3版本还只是处于测试阶段,1.4版本已经正式推出。

在网上搜了一遍,发现关于使用DataSet加载文本的资料比较少,官方举的例子只是csv格式的,要求csv文件中所有样本必须具有相同的维度,也就是padding必须在写入csv文件之前做掉,这会增加文件的大小。

经过一番折腾试验,这里给出一个DataSet+TFRecords加载变长样本的范例。

首先先把变长的数据写入到TFRecords文件:

def writedata():
 xlist = [[1,2,3],[4,5,6,8]]
 ylist = [1,2]
 #这里的数据只是举个例子来说明样本的文本长度不一样,第一个样本3个词标签1,第二个样本4个词标签2
 writer = tf.python_io.TFRecordWriter("train.tfrecords")
 for i in range(2):
  x = xlist[i]
  y = ylist[i]
  example = tf.train.Example(features=tf.train.Features(feature={
   "y": tf.train.Feature(int64_list=tf.train.Int64List(value=[y])),
   'x': tf.train.Feature(int64_list=tf.train.Int64List(value=x))
  }))
  writer.write(example.SerializeToString())
 writer.close()

然后用DataSet加载:

feature_names = ['x']
 
def my_input_fn(file_path, perform_shuffle=False, repeat_count=1):
 def parse(example_proto):
  features = {"x": tf.VarLenFeature(tf.int64),
    "y": tf.FixedLenFeature([1], tf.int64)}
  parsed_features = tf.parse_single_example(example_proto, features)
  x = tf.sparse_tensor_to_dense(parsed_features["x"])
  x = tf.cast(x, tf.int32)
  x = dict(zip(feature_names, [x]))
  y = tf.cast(parsed_features["y"], tf.int32)
  return x, y
 
 dataset = (tf.contrib.data.TFRecordDataset(file_path)
    .map(parse))
 if perform_shuffle:
  dataset = dataset.shuffle(buffer_size=256)
 dataset = dataset.repeat(repeat_count)
 dataset = dataset.padded_batch(2, padded_shapes=({'x':[6]},[1])) #batch size为2,并且x按maxlen=6来做padding
 iterator = dataset.make_one_shot_iterator()
 batch_features, batch_labels = iterator.get_next()
 return batch_features, batch_labels
 
next_batch = my_input_fn('train.tfrecords', True)
init = tf.initialize_all_variables()
with tf.Session() as sess:
 sess.run(init)
 for i in range(1):
  xs, y =sess.run(next_batch)
  print(xs['x'])
  print(y)

注意变长的数据TFRecords解析要用VarLenFeature,然后用sparse_tensor_to_dense转换。

以上这篇使用tensorflow DataSet实现高效加载变长文本输入就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python AES加密实例解析
Jan 18 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python视频按帧截取图片工具
Jul 23 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
Python可以实现栈的结构吗
May 27 Python
Python如何进行时间处理
Aug 06 Python
python 装饰器的实际作用有哪些
Sep 07 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
python机器学习库xgboost的使用
Jan 20 #Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 #Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 #Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 #Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 #Python
基于Python获取照片的GPS位置信息
Jan 20 #Python
如何基于pythonnet调用halcon脚本
Jan 20 #Python
You might like
基于mysql的论坛(7)
2006/10/09 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
php依赖注入知识点详解
2019/09/23 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
python 多维高斯分布数据生成方式
2019/12/09 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
工程造价专业大学生职业规划范文
2014/03/09 职场文书
大学生就业策划书范文
2014/04/04 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
消防验收申请报告
2015/05/15 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis