使用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调用cmd命令行制作刷博器
Jan 13 Python
Python类的多重继承问题深入分析
Nov 09 Python
Python中处理时间的几种方法小结
Apr 09 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python使用filetype精确判断文件类型
Jul 02 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
Python Opencv图像处理基本操作代码详解
Aug 31 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
详解Django中类视图使用装饰器的方式
2018/08/12 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
浅析Python 序列化与反序列化
2020/08/05 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
金融专业个人求职信
2013/09/22 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
财政局个人年终总结
2015/03/03 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技