使用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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
利用ctypes提高Python的执行速度
Sep 09 Python
python中import学习备忘笔记
Jan 24 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
如何学习Python time模块
Jun 03 Python
jupyter notebook更换皮肤主题的实现
Jan 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
php&mysql 日期操作小记
2012/02/27 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
个人找工作的自我评价
2013/10/17 职场文书
建筑施工员岗位职责
2013/11/26 职场文书
上课迟到检讨书100字
2014/01/11 职场文书
学校党支部承诺书
2015/04/30 职场文书
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
海弦WR-800F
2022/04/05 无线电
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python