使用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深入学习之上下文管理器
Aug 31 Python
在Python中操作文件之truncate()方法的使用教程
May 25 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Python判断两个对象相等的原理
Dec 12 Python
Python用for循环实现九九乘法表
May 31 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
用Python远程登陆服务器的步骤
Apr 16 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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文件操作实例代码
2012/05/10 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
Vue基础学习之项目整合及优化
2019/06/02 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python 运算符 供重载参考
2009/06/11 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Sanic框架应用部署方法详解
2018/07/18 Python
如何通过Python实现标签云算法
2019/07/02 Python
Python for循环与getitem的关系详解
2020/01/02 Python
python Tornado框架的使用示例
2020/10/19 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
.net C#面试题
2012/08/28 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
《小池塘》教学反思
2014/02/28 职场文书
总经理人事任命书
2014/06/05 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
MySQL插入数据与查询数据
2022/03/25 MySQL
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python