使用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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Django实现快速分页的方法实例
Oct 22 Python
Python自定义简单图轴简单实例
Jan 08 Python
pyqt5自定义信号实例解析
Jan 31 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
用Python进行栅格数据的分区统计和批量提取
May 27 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php 时间计算问题小结
2009/01/04 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
jquery 上下滚动广告
2009/06/17 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
vue地区选择组件教程详解
2018/05/04 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Django多个app urls配置代码实例
2020/11/26 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
工艺员岗位职责
2014/02/11 职场文书
人事专员的职责
2014/02/26 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
html5表单的required属性使用
2021/07/07 HTML / CSS