使用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脚本将绝对url替换为相对url的教程
Apr 24 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
pytorch中图像的数据格式实例
Feb 11 Python
pygame实现弹球游戏
Apr 14 Python
Python网页解析器使用实例详解
May 30 Python
Django视图、传参和forms验证操作
Jul 15 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命令行写shell实例详解
2018/07/19 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
javascript中this指向详解
2016/04/23 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
node.js基础知识小结
2018/02/26 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python微信公众号开发平台
2018/01/25 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python实现随机漫步方法和原理
2019/06/10 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
python实现UDP协议下的文件传输
2020/03/20 Python
python如何提升爬虫效率
2020/09/27 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
如何利用find命令查找文件
2015/02/07 面试题
2015年园林绿化工作总结
2015/05/23 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书