问题标签 [tfrecord]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10648 浏览

machine-learning - TensorFlow Dataset.shuffle - 大型数据集

我将 TensorFlow 1.2 与 20G TFRecord 文件中的数据集一起使用。该 TFRecord 文件中有大约 50 万个样本。

看起来如果我为 选择一个小于数据集中记录数量的值buffer_size,则只会使用 TFRecord 中的前 N ​​条记录。https://www.tensorflow.org/api_docs/python/tf/contrib/data/Dataset#shuffle

例如,如果buffer_size = 100, 似乎只使用了前 100 条记录。

问题

应该buffer_size始终是数据集的长度吗?这会影响训练表现吗?

0 投票
1 回答
799 浏览

python - 无法从 Tensorflow tfrecord 文件中读取

我可以使用以下代码创建 tfrecords 文件。

但是,在使用以下函数从 tfrecord 文件中读取数据时

我不断收到以下错误

上述错误的原因是什么以及如何克服这个错误?我可以通过使用tf.python_io.tf_record_iterator(path=filename).

0 投票
1 回答
738 浏览

python - Tensorflow:InvalidArgumentError(参见上面的回溯):您必须使用 dtype 字符串为占位符张量“arg0”提供一个值

我需要将零填充到从 TFRecord 文件中读取的张量(代码片段中的“ARRAY”)。因为我使用的训练模型要求它们的形状应该相同。但是,我的输入有不同的宽度和长度。因此,我试图计算零的数量(代码片段中的'paddings = tf.Variable([[0, targetLength],[0, targetWidth]])')我应该填充。但是,tensorflow 引发了 InvalidArgumentError 并且值“arg0”从未出现在我的代码中。

变量 ARRAY 的示例如下:

我应该把它填充到

可能有很多大数组,所以我想在训练之前填充它。这是我的代码片段。

这是张量流的输出。

sess.run(paddings.initializer)顺便说一句,如果用以下代码替换,tensorflow 不会报告错误:

我还想知道是否还有其他方法可以填充从 TFRecord 读取的数组。谢谢。

0 投票
3 回答
13536 浏览

python - 如何将numpy数组存储为tfrecord?

我正在尝试从 numpy 数组创建 tfrecord 格式的数据集。我正在尝试存储 2d 和 3d 坐标。

2d 坐标是 float64 类型的形状 (2,10) 的 numpy 数组 3d 坐标是 float64 类型的形状 (3,10) 的 numpy 数组

这是我的代码:

当我运行这个我得到错误:

我不知道如何解决这个问题。我应该将功能存储为 int64 还是字节?我不知道该怎么做,因为我对 tensorflow 完全陌生。任何帮助都会很棒!谢谢

0 投票
1 回答
571 浏览

python - 张量流超出范围错误

我的代码是从 tfrecord 文件中读取图像

错误信息

我将所有图像和标签转换为 tfrecord 文件,并且在训练期间必须将文件转换为原始图像和标签。我正在尝试从 tfrecords 读取图像,但弹出超出范围的错误。请任何人帮助如何解决此错误

0 投票
2 回答
5413 浏览

python - 如何使用 Dataset API 读取变体长度列表的 TFRecords 文件?

我想使用 Tensorflow 的 Dataset API 来读取变体长度列表的 TFRecords 文件。这是我的代码。

检查 TFRecord 文件

但是当我尝试使用 Dataset API 读取 TFRecord 文件时,它显示以下错误。

tensorflow.python.framework.errors_impl.InvalidArgumentError:名称:,键:数据,索引:0。 int64 值的数量!= 预期。值大小:5 但输出形状:[]

谢谢你。
更新: 我尝试使用以下代码通过 Dataset API 读取 TFRecord,但它们都失败了。

或者

和错误:

回溯(最后一次调用):文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py”,第 468 行,在 make_tensor_proto str_values = [compat.as_bytes(x) for x in proto_values] 文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py”,第 468 行,在 str_values = [compat.as_bytes(x) for x in proto_values ] 文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/util/compat.py”,第 65 行,在 as_bytes (bytes_or_text,)) TypeError: Expected binary or unicode string, got

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“2tfrecord.py”,第 126 行,在 main1() 文件“2tfrecord.py”,第 72 行,在 main1 iterator = ds.map(_parse_function).make_one_shot_iterator() 文件“/usr /local/lib/python3.5/dist-packages/tensorflow/python/data/ops/dataset_ops.py”,第 712 行,在地图返回 MapDataset(self,map_func) 文件“/usr/local/lib/python3.5 /dist-packages/tensorflow/python/data/ops/dataset_ops.py”,第 1385 行,在初始化中 dtype=dtype, shape=shape, verify_shape=verify_shape)) 文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py”,第 472 行,在 make_tensor_proto“支持的类型。 " % (type(values), values)) TypeError: 无法将类型对象转换为张量。内容:SparseTensor(indices=Tensor("ParseSingleExample/Slice_Indices_i:0", shape=(?, 1), dtype=int64), values=Tensor("ParseSingleExample/ParseExample/ParseExample:3", shape=(?,), dtype=int64),dense_shape=Tensor("ParseSingleExample/Squeeze_Shape_i:0", shape=(1,), dtype=int64))。考虑将元素转换为支持的类型。在 make_tensor_proto “支持的类型”中。% (type(values), values)) TypeError: 无法将类型对象转换为张量。内容:SparseTensor(indices=Tensor("ParseSingleExample/Slice_Indices_i:0", shape=(?, 1), dtype=int64), values=Tensor("ParseSingleExample/ParseExample/ParseExample:3", shape=(?,), dtype=int64),dense_shape=Tensor("ParseSingleExample/Squeeze_Shape_i:0", shape=(1,), dtype=int64))。考虑将元素转换为支持的类型。在 make_tensor_proto “支持的类型”中。% (type(values), values)) TypeError: 无法将类型对象转换为张量。内容:SparseTensor(indices=Tensor("ParseSingleExample/Slice_Indices_i:0", shape=(?, 1), dtype=int64), values=Tensor("ParseSingleExample/ParseExample/ParseExample:3", shape=(?,), dtype=int64),dense_shape=Tensor("ParseSingleExample/Squeeze_Shape_i:0", shape=(1,), dtype=int64))。考虑将元素转换为支持的类型。dtype=int64),dense_shape=Tensor("ParseSingleExample/Squeeze_Shape_i:0", shape=(1,), dtype=int64))。考虑将元素转换为支持的类型。dtype=int64),dense_shape=Tensor("ParseSingleExample/Squeeze_Shape_i:0", shape=(1,), dtype=int64))。考虑将元素转换为支持的类型。

Python 版本:3.5.2
TensorFlow 版本:1.4.1

0 投票
1 回答
2290 浏览

python - 如何从 TFrecord 为 TensorFlow 中的训练网络创建批次?

我已将数据保存到 tfrecord 文件中。它有 1000 个样本和 2 个特征(一个是输入,另一个是输出)。输入是形状 [1,20] 和输出 [1,10]。它们都是从扁平的 numpy 数组创建的。我正在尝试从它们创建批次,以便我可以使用它们来训练我的网络,但我无法弄清楚如何。

这是我训练网络的代码

这是我从中获取数据的文件。

错误:

在看了其他问题之后,我在想也许我的批次应该是 ndarray 什么的?但我不知道如何将我的数据集变成那种形式。我什至无法弄清楚如何在没有迭代器的情况下使用我的数据。任何指导都会很棒!谢谢

0 投票
2 回答
932 浏览

python - 使用 Tensorflow Dataset API 读取 TFRecords 文件时,预处理输入数据会减慢输入管道的速度

我正在使用 Tensorflow Dataset API 读取 TFRecords 文件,但 GPU 使用率仍然很低(10%)。我认为原因是我在将数据输入sess.run(). 下面是我的代码。
1. 从 3 个单独的文件创建一个数据集。

2. 构建张量流图。

3. 生成数据data_iter并运行 TF 会话。

我的代码达到了大约 10~15% 的 GPU 使用率。我认为原因是_data_generate()在处理 numpy 数组时消耗了太多时间。但我不知道如何改进我的管道。这是我的问题。

  1. 根据Tensorflow 性能指南Importing Data,我认为使用 Dataset API 和 TFRecords 文件是解决这个低 GPU 使用率问题的最佳选择。或者我应该使用 python 多线程先将数据输入缓冲区,然后再将数据输入sess.run(). 由于本网站提到,我没有选择后一种解决方案

我们发现使用 tf.FIFOQueue 和 tf.train.queue_runner 在使用大输入和每秒更高样本处理时不能使多个当前一代 GPU 饱和,

  1. 我认为投入_data_generate()可能_parse_function()会解决这个问题,因为 Tensorflow 处理预处理数据部分而不是 python。但我不知道该怎么做,因为_data_generate()需要来自 3 个单独文件的 3 行。有谁知道如何做到这一点?

  2. 还有其他方法可以解决我的 GPU 使用率低的问题吗?

谢谢你。

0 投票
2 回答
7078 浏览

python - TensorFlow - 从 TFRecords 文件中读取视频帧

TLDR; 我的问题是如何从 TFRecords 加载压缩视频帧。

我正在建立一个数据管道,用于在大型视频数据集 ( Kinetics ) 上训练深度学习模型。为此,我正在使用 TensorFlow,更具体地说是tf.data.DatasetTFRecordDataset结构。由于数据集包含约 30 万个 10 秒的视频,因此需要处理大量数据。在训练期间,我想从视频中随机采样 64 个连续帧,因此快速随机采样很重要。为了实现这一点,在训练期间可能会出现许多数据加载场景:

  1. 来自视频的样本。ffmpeg使用orOpenCV和示例帧加载视频。不理想,因为在视频中搜索很棘手,并且解码视频流比解码 JPG 慢得多。
  2. JPG 图片。通过将所有视频帧提取为 JPG 来预处理数据集。这会生成大量文件,由于随机访问,这可能不会很快。
  3. 数据容器。将数据集预处理为TFRecordsHDF5文件。需要做更多的工作来准备好管道,但很可能是这些选项中最快的。

我决定选择选项(3)并使用TFRecord文件来存储数据集的预处理版本。然而,这也并不像看起来那么简单,例如:

  1. 压缩。将视频帧作为未压缩字节数据存储在 TFRecords 中将需要大量磁盘空间。因此,我提取所有视频帧,应用 JPG 压缩并将压缩字节存储为 TFRecords。
  2. 视频数据。我们正在处理视频,因此 TFRecords 文件中的每个示例都将非常大,并且包含多个视频帧(通常 250-300 用于 10 秒的视频,具体取决于帧速率)。

我编写了以下代码来预处理视频数据集并将视频帧写入 TFRecord 文件(每个文件大小约为 5GB):

这很好用;数据集很好地编写为 TFRecord 文件,帧为压缩的 JPG 字节。我的问题是,如何在训练期间读取 TFRecord 文件,从视频中随机采样 64 帧并解码 JPG 图像。

根据TensorFlow 的文档tf.Data我们需要执行以下操作:

有很多关于如何使用图像执行此操作的示例,这非常简单。但是,对于视频和帧的随机采样,我被卡住了。该tf.train.Features对象将帧存储为frame/00001frame/000002。我的第一个问题是如何从dataset.map()函数内部随机采样一组连续帧?考虑因素是由于 JPG 压缩,每个帧都有可变数量的字节,需要使用tf.image.decode_jpeg.

任何帮助如何最好地设置从 TFRecord 文件读取视频样本将不胜感激!

0 投票
2 回答
905 浏览

tensorflow - 在创建“TFRecord”文件之前调整 JPG 的大小?

我正在构建一个模型来使用tf.slim它来运行 AVA 数据集——32GB 大小,大约 256K JPG 图像。针对全分辨率图像,我创建了 20 个 TFRecord用于训练的分片文件,每个文件大小为1.54 GB.

在训练期间,我的预处理步骤将(256,256,3)在提取随机裁剪的(224,224,3). 如果我在创建文件之前调整 JPG 图像TFRecord的大小,文件大小会缩小到28 MB.

除了额外的时间,如果我在创建 JPG 文件之前调整其大小,我的方法是否还有其他问题TFRecords