使用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


猜你喜欢
- 新的 Python 版本推出了有趣的新功能。Python 是当今最流行的编程语言之一。它有广泛的领域和应用,从学习计算机科学的基础,到执行复
- 什么是Dynamic HTML 今天我们以问答的形式来讲述什麽是Dynamic Html。问:亲爱的网猴,我经常看到讲述有关“Dynamic
- 本文实例讲述了Python编程中的反模式。分享给大家供大家参考。具体分析如下:Python是时下最热门的编程语言之一了。简洁而富有表达力的语
- 如果你有一字段dm记录了一个url,为了更好的优化模糊查询速度或统计速度,在数据表原有的结构上增加3个字段,分别为 `sdm`
- 大家知道,在js里encodeURIComponent 方法是一个比较常用的编码方法,但因工作需要,在asp里需用到此方法,查了好多资料,没
- 中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法:
- 前言PyQt是Python语言环境的GUI编程解决方案之一,另外还有PyGTK、wxPython等也较为常用。PyQt作为Qt语言的Pyth
- 前言上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutin
- Django文件上传,供大家参考,具体内容如下需求1、完成学生信息注册操作2、将学生信息入库3、将上传文件存放至项目下media文件夹下4、
- 下面列出了asp远程网页数据采集程序中经常用到的函数,很实用,特别是正则表达式过滤函数。包括了使用xmlhttp采集远程网页内容,使用ado
- Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它
- 在这篇文章中,将向您展示如何使用Python链接目前主流的MongoDB(V3.4.0)数据库,主要使用PyMongo(v3.4.0)和Mo
- <script language=javascript> function moveIt(obj){ var tableId;
- 前言在写波段配准相关代码时经常需要用到tif影像的波段合成和分解,虽然可以用ENVI才处理,但是每次都要打开再设置一些参数有些麻烦,所以本着
- 前言大家好,我是Peter~本文记录的是Pandas两种少用的读取文件方式:读取在线文件的数据读取剪贴板的数据声明:本文案例和在线数据仅用于
- 本文实例讲述了python实现数值积分的Simpson方法。分享给大家供大家参考。具体如下:#coding = utf-8#simpson
- MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写
- 在pytorch框架中,关于日志的保存,其中一种方式就是借鉴使用了tensorboard的库。所以我们需要在环境中安装tensorboard
- 将近两个多月没有敲linux命令,手指头不听话了。该再次温习卖油翁的故事了。曾为oracle如何启动多个实例运行纠结过,不服输心理。当时在一
- 1、创建表1.1、创建表基本语法CREATE TABLE tablename (column_name_1 column_type_1 co