使用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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
Django获取应用下的所有models的例子
Aug 30 Python
Python调用.NET库的方法步骤
Dec 27 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
python中sklearn的pipeline模块实例详解
May 21 Python
Python sorted对list和dict排序
Jun 09 Python
Python截图并保存的具体实例
Jan 14 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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
phpwind中的数据库操作类
2007/01/02 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
告诉大家什么是JSON
2008/06/10 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Python argparse模块应用实例解析
2019/11/15 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python