使用tensorflow DataSet实现高效加载变长文本输入
作者:lyg5623 发布时间:2022-12-09 09:26:09
标签:tensorflow,DataSet,变长,文本输入
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转换。
来源:https://blog.csdn.net/lyg5623/article/details/78456915
0
投稿
猜你喜欢
- Python 在 2.2 版本中引入了descriptor(描述符)功能,也正是基于这个功能实现了新式类(new-styel class)的
- Python是跨平台的,免费开源的一门计算机编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不
- 目录1. 字符串拆分函数.split()2. 字符串拼接函数.join()扩展:理解" ".join(s.split(&
- 如下所示:'''以下代码均为讲解,不能实际操作''''''博客园 I
- python中bool数组取反操作由于Python中使用数字0,1 代表Flase,Ture 。所以bool数组不能像matlab一样直接进
- 前言经常看到这种算法可视化的图片,但往往做不到和画图的人心灵相通,所以想自己画一下,本文主要实现归并排序和希尔排序,如果想实现其他算法可参考
- 我为一大型网站做了一个论坛,也顺利通过了测试。由于是第一次做这方面的数据库,我不知道比其它网站上数据库差距有多大,是不是够优化。能推荐或介绍
- javascript曾一度被认为是玩具型的语言,因为它太容易上手,而且,javascript曾一度担任为web站点“打杂”的职责。直到Aja
- 最近写了一些python3程序,四处能看到bytes类型,而它并不存在于python2中,这也是python3和python2显著区别之一。
- 一 引入我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人
- 设计模式:迭代迭代是一种设计模式,解决有序便利序列的问题。通用的可迭代对象需要支持done和next方法。伪代码如下:while not i
- mysql_result定义和用法mysql_result() 函数返回结果集中一个字段的值。mysql_result() 返回 MySQL
- 我们把一个事物进行分解,就可以得到其中的元素。对于python中的解包来说,也是同样的使用,相信大家从名称就可以观察出来了。那么在具体的解包
- 问题:“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建
- python书写爬虫的一个框架,它也提供了多种类型爬虫的基类,scrapy用途广泛,可以用于数据挖掘、监测和自动化测试首先要先安装pytho
- 当你在IE中点击一个Realplayer连接时,系统会自动启动Realplayer软件,不仅占用系统内存,而且在上网时Realplayer容
- 需要在 ~/.pip/pip.conf 配置文件中加入下面的语句,避免这类警告:没有目录或没有配置文件需要自己新建mkdir ~/.pip/
- def ddns():"""用当前ip更新ddns"""headers = {&
- 前言在用python处理表格数据中,这其中的工作重点就是对表格类型的数据进行梳理、计算和展示,本文重点介绍展示这个方面的工作。首先我们看一个
- 本文实例讲述了基于JS实现html中placeholder属性提示文字效果。分享给大家供大家参考,具体如下:如何通过js实现html的pla