使用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中使用OpenCV进行人脸检测的例子
Apr 18 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python读取properties配置文件操作示例
Mar 29 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python中的for循环
Sep 28 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python检测IP地址变化并触发事件
Dec 26 Python
pygame实现五子棋游戏
Oct 29 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
python实现三阶魔方还原的示例代码
Apr 28 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
php json_encode奇怪问题说明
2011/09/27 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
pycharm远程调试openstack代码
2017/11/21 Python
浅谈Python中的私有变量
2018/02/28 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python缓存技术实现过程详解
2019/09/25 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
社区居务公开实施方案
2014/03/27 职场文书
文明寝室申报材料
2014/05/12 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
三国演义读书笔记
2015/06/25 职场文书
谢师宴学生致辞
2015/07/27 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers