问题标签 [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.
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% 的精度。
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 函数才能使用所有不错的功能?
作为参考,这是我到目前为止的完整代码。
编辑:完整的堆栈跟踪
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"值的方式上。
tensorflow - 如何正确实现来自具有多个输入的生成器的 tf.data?
我为连体网络创建了一个自定义生成器,该生成器为网络三元组提供图像:
从生成器创建 tf.data 数据集的正确方法是什么?如果我将三元组包装在元组/列表中,我在下面的尝试会导致生成器出错。
但是如果我这样做了,我会得到同样的错误,但是当我喂它时来自模型ds
。
该错误是不言自明的。我只是不明白如何在创建数据集时[a, p, n]
从函数中获取它,但不是在我调用时而是在使用时tf.data.dataset.from_generator()
.fit(ds)
.predict(ds)
感谢您提供的任何积分,谢谢!
tensorflow - AttributeError: 'Tensor' object has no attribute 'numpy' 使用版本 2.4.1 启用了急切执行
我一直在尝试将我构建的生成器转换为 tf.data.dataset。我已经走了很远,现在我有一些像这样简单的东西
当我在文件名本身上调用它时,transform img 会按预期工作。喜欢:
但是当我将它映射到数据集时
我得到标题中的错误。
我又在做傻事了不是吗?感谢您的帮助!
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 答案
python - 具有多个输入和目标的 TensorFlow 数据集
我正在尝试使用 ArcFace 层实现模型: https ://github.com/4uiiurz1/keras-arcface
为此,我创建了一个 tf.data.dataset,如下所示:
当我打电话时model.fit(dataset)
我收到以下错误:
但这应该根据:
有人能指出我的愚蠢吗?
谢谢!
编辑:这解决了一些问题:
我认为这是我们正在尝试的。但是我得到目标的形状错误,它是 (n_class, 1) 而不仅仅是 (n_class,)
即 fit 方法抛出此错误
和这个警告
python - 将张量作为参数传递给函数
我正在尝试规范化 tf.data.Dataset,如下所示:
val 数据集是这样的:
如果我打印一个元素,我可以看到:
但是在我的函数输出中打印它:
所以我不能对我的图像数组执行任何转换,因为我没有张量数组'args_2:0'
如何正确地将每个元素传递给我的规范化函数?
python - tf.data.TextLineDataset 和 tf.data.experimental.make_csv_dataset 的区别
打开 Google colab 笔记本并运行以下语句
然后在下面运行
显然 tf.data.TextLineDataset 和 tf.data.experimental.make_csv_dataset 处理文本文件的方式存在巨大差异。为什么tensorflow有这两个在实验中,另一个在外面。
object-detection - 使用 tf.data 的对象检测管道
如果有人能推动我采取正确的做法,将不胜感激
我正在尝试构建数据管道来训练对象检测模型。我想为此目的使用 tf.data.Dataset。无论我如何处理这个问题,我都面临着挑战。以下代码是我最接近目标的代码,但它仅适用于批量大小为 1(2 或更多给我一个批处理错误)。一旦批处理中有多个图像,每个图像都有不同数量的边界框,我就会开始收到错误消息:
在上述错误中,第一张图像有 7 个边界框,而第二张图像有 5 个。
以下是我构建管道的最新代码。