使用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使用htmllib分析网页内容的方法
May 08 Python
使用pdb模块调试Python程序实例
Jun 02 Python
用Python解决计数原理问题的方法
Aug 04 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
python调用c++传递数组的实例
Feb 13 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
使用python制作一个解压缩软件
Nov 13 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
opencv 查找连通区域 最大面积实例
Jun 04 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的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
laravel安装和配置教程
2014/10/29 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python subprocess模块常见用法分析
2018/06/12 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
30岁生日感言
2014/01/25 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
八年级作文之友情
2019/11/25 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang