问题标签 [tf.data.dataset]

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 投票
0 回答
155 浏览

python - Tensorflow“model.evaluate()”每次在同一个数据集上运行都会给出不同的结果

当我在同一验证集中多次在 Tensorflow 中运行 model.evaluate 时,我得到不同的结果。

该模型包括数据增强层、EfficientNetB0 基线和 GlobalAveragePooling 层(见下文)。我正在使用来自数据帧的张量切片的 tf.data 管道加载验证数据集,并且它没有被打乱,因此顺序始终相同。

我知道如果我再次训练模型,确实结果可能会有所不同,因为某些层是用随机权重初始化的,但我希望对同一模型的评估是相等的。我正在使用相同的 saved_model_path 运行 get_custom_model 方法,以便每次模型加载相同的权重(之前保存的)。

我用来比较的不同指标是损失、精度和召回,以防它们相关。优化器是 rmsprop 和损失 BinaryCrossentropy。另外,我尝试将 training_base_model 更改为 False 并且指标要差得多(几乎像随机权重)。

PS:同样在训练期间,我使用相同的验证集来获取验证指标并从中保存最佳权重,但是当我再次加载最佳权重时,结果并不相同。例如,在训练时期的验证期间,我可以获得 81.28% 的精度,然后在加载这些权重并执行 model.evaluate() 时获得 57% 的精度。

0 投票
0 回答
158 浏览

tensorflow - tf.data 输入管道、动态形状张量和切片:NotImplementedError: Cannot convert a symbolic Tensor (args_0:0) to a numpy array

我正在尝试使用 tensorflow 和tf.data. 我想复制 的功能PIL.Image.Image.crop,其中可以传递负边界框值,以便用零扩展裁剪。

例如,如果我调用PIL.Image.Image.crop([-10, 0, img_height, img_width]),则图像的开头有 10 行额外的行,用零填充。

据我了解,在 tf.data 输入管道中使用 python 函数会显着减慢代码速度,因此我尝试使用 tensorflow 函数编写所有内容。我还想使用 API 已经提供的预取、批处理、改组等。

我使用 tensorflow 函数实现 PIL 裁剪的计划是预先分配一个(动态成形的)零张量并使用切片分配裁剪值。

这是我遇到的错误:NotImplementedError: Cannot convert a symbolic Tensor (args_2:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported

这是复制问题的最少代码:

问题1:我该如何解决这个问题?

问题 2:我来自 PyTorch 背景,我对整个 tf.data 管道的复杂性感到困惑。为什么我要使用 tensorflow 函数才能使用所有不错的功能?


作为参考,这是我到目前为止的完整代码。


编辑:完整的堆栈跟踪

0 投票
0 回答
114 浏览

python - 在其中使用 tf.while_loop 时,使用 tf.function 对 tensorflow 数据集进行极慢的数据预处理

我正在尝试预处理包含约 20,000 张图像、它们的特征向量和它们的掩码(图像分割)的数据集。由于数据的大小,我无法执行内存预处理。

我使用这个函数加载数据:

预处理包括获取数据集中存在的所有图像与输入图像(由用户提供)之间的欧式距离,然后将所有欧式距离除以所有欧式距离中的最大欧式距离。为此,我使用以下给定的功能:

没有内置函数可以在 tensorflow 数据集中的特定数据流中查找最大元素(这里,datastreams = image_names, image, featvecs, mask, eucl_dists)为了找到欧几里得距离的最大值,我创建了一个单独的 tf.dataset 包含欧几里得距离,我使用了数据集缩减策略。我创建了大小为 5000 的批次,并返回其中存在的最大元素。使用这种策略,我可以在 2 次迭代中有效地获得最大欧几里得距离。

问题:

当我使用 tf.function 装饰器时,整个函数将执行得非常快,然后卡在“return ratio_eucl_ds”(I)。如果我不使用 tf.function 装饰器,那么函数就会卡在 for-loop(II) 中。执行代码大约需要 12 分钟。当我在"max_eucl_dist"中随机放入任何值时,预处理函数就会无缝执行。因此,我想问题出在我试图提取"max_eucl_dist"值的方式上。

0 投票
0 回答
241 浏览

tensorflow - 如何正确实现来自具有多个输入的生成器的 tf.data?

我为连体网络创建了一个自定义生成器,该生成器为网络三元组提供图像:

从生成器创建 tf.data 数据集的正确方法是什么?如果我将三元组包装在元组/列表中,我在下面的尝试会导致生成器出错。

但是如果我这样做了,我会得到同样的错误,但是当我喂它时来自模型ds

该错误是不言自明的。我只是不明白如何在创建数据集时[a, p, n]从函数中获取它,但不是在我调用时而是在使用时tf.data.dataset.from_generator().fit(ds).predict(ds)

感谢您提供的任何积分,谢谢!

0 投票
1 回答
407 浏览

tensorflow - AttributeError: 'Tensor' object has no attribute 'numpy' 使用版本 2.4.1 启用了急切执行

我一直在尝试将我构建的生成器转换为 tf.data.dataset。我已经走了很远,现在我有一些像这样简单的东西

当我在文件名本身上调用它时,transform img 会按预期工作。喜欢:

但是当我将它映射到数据集时

我得到标题中的错误。

我又在做傻事了不是吗?感谢您的帮助!

0 投票
0 回答
49 浏览

tensorflow - 使用 TFRecords 进行 Tensorflow2 训练:ValueError:as_list() 未在未知的 TensorShape 上定义

我有一个关于 TFRecords 以及如何用它们训练 tf.keras 模型的问题。为此,我构建了一个玩具示例,加载 iris 数据集,将数据写入 TFRecord,将其读回并尝试训练我在教程中找到的简单 MLP。

对于 TFRecords 的编码/写入/读取/解码,我主要遵循官方Tutorial

据我所知,我可以恢复原始数据,所以我认为我将数据集插入 MLP,因为fit 方法应该能够与 tf.data 数据集一起使用,但我收到以下错误(缩写):

代码和完整的错误应该在这个 gist中可见。

我已经尝试了以下步骤:

  • 在原始数据上运行模型(作品)
  • 检查数据(似乎重建正确)
  • 尝试在解码中显式设置张量形状(即使 tf.io.parse_tensor 不需要这样做)

有谁知道,如何解决这个问题,或者我做错了什么?

编辑:

打开描述该错误的GitHub 问题。

如果有人对使用 decode_raw 的解决方法感兴趣,请查看此stackoverflow 答案

0 投票
2 回答
1643 浏览

python - 具有多个输入和目标的 TensorFlow 数据集

我正在尝试使用 ArcFace 层实现模型: https ://github.com/4uiiurz1/keras-arcface

为此,我创建了一个 tf.data.dataset,如下所示:

当我打电话时model.fit(dataset)

我收到以下错误:

但这应该根据:

Keras 中具有多个输入/输出的 tf.data

有人能指出我的愚蠢吗?

谢谢!

编辑:这解决了一些问题:

我认为这是我们正在尝试的。但是我得到目标的形状错误,它是 (n_class, 1) 而不仅仅是 (n_class,)

即 fit 方法抛出此错误

和这个警告

0 投票
1 回答
189 浏览

python - 将张量作为参数传递给函数

我正在尝试规范化 tf.data.Dataset,如下所示:

val 数据集是这样的:

如果我打印一个元素,我可以看到:

但是在我的函数输出中打印它:

所以我不能对我的图像数组执行任何转换,因为我没有张量数组'args_2:0'

如何正确地将每个元素传递给我的规范化函数?

0 投票
1 回答
111 浏览

python - tf.data.TextLineDataset 和 tf.data.experimental.make_csv_dataset 的区别

打开 Google colab 笔记本并运行以下语句

然后在下面运行

显然 tf.data.TextLineDataset 和 tf.data.experimental.make_csv_dataset 处理文本文件的方式存在巨大差异。为什么tensorflow有这两个在实验中,另一个在外面。

0 投票
0 回答
37 浏览

object-detection - 使用 tf.data 的对象检测管道

如果有人能推动我采取正确的做法,将不胜感激

我正在尝试构建数据管道来训练对象检测模型。我想为此目的使用 tf.data.Dataset。无论我如何处理这个问题,我都面临着挑战。以下代码是我最接近目标的代码,但它仅适用于批量大小为 1(2 或更多给我一个批处理错误)。一旦批处理中有多个图像,每个图像都有不同数量的边界框,我就会开始收到错误消息:

在上述错误中,第一张图像有 7 个边界框,而第二张图像有 5 个。

以下是我构建管道的最新代码。