使用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脚本操作MongoDB的教程
Apr 16 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
python简单实现AES加密和解密
Mar 28 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python3搭建http服务器的实现代码
Feb 11 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
python怎么判断模块安装完成
Jun 19 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
python源文件的字符编码知识点详解
Mar 04 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/06/13 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
使图片旋转的3种解决方案
2013/11/21 Javascript
JS的get和set使用示例
2014/02/20 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python快速查找算法应用实例
2014/09/26 Python
在Python中编写数据库模块的教程
2015/04/29 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
新闻记者个人求职的自我评价
2013/11/28 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
民用住房租房协议书
2014/10/29 职场文书
面试通知短信
2015/04/20 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
车间班组长竞聘书
2015/09/15 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python