使用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中操作字典之clear()方法的使用
May 21 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
基于python log取对数详解
Jun 08 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 Python
对python 自定义协议的方法详解
Feb 13 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
python 3.8.3 安装配置图文教程
May 21 Python
python 如何调用远程接口
Sep 11 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
jQuery轮播图实例详解
2018/08/15 jQuery
vue2过滤器模糊查询方法
2018/09/16 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
抗震救灾标语
2014/06/26 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
商务邀请函
2015/01/30 职场文书
北京故宫导游词
2015/01/31 职场文书
国庆节新闻稿
2015/07/17 职场文书
教师节祝酒词
2015/08/11 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL