问题标签 [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 回答
106 浏览

tensorflow - 平衡图像数据集的特定不平衡类别

我有一个在基本目录中有 12 个类的数据集。然而,这 12 个类别由若干数量的图像组成。12个类别的图像数量不一致,因此它对总精度的影响。因此,我应该将数据增强应用于数据量较少的特定类吗?

各类图像数据:

因此,如果我必须应用数据增强来增加具有较低图像数据量的特定类中的数据量,结果,我已经应用了数据增强,但它不会增加特定的类。除此之外,我想用原始数据生成增强数据,这意味着输入和输出目录将是相同的。因此,有可能帮我解决这个问题吗?

笔记本:Google Colab操作系统:Windows 10

特定(个人课程)的增强代码:

输出:Found 0 images belonging to 0 classes.

0 投票
2 回答
183 浏览

python - 从数据集 Tensorflow 中删除不良数据

我有一个使用 tf.data 的训练管道。在数据集中有一些坏元素,在我的例子中值为 0。如何根据它们的值删除这些坏数据元素?由于数据集很大,我希望能够在训练时在管道中删除它们。

假设从以下伪代码:

建议是根据特征值使用 ds.skip(1),还是提供某种中性的重量/损失?

0 投票
1 回答
304 浏览

python - 在 tf.data 中切片导致“在图形执行中不允许迭代 `tf.Tensor`”错误

我有一个如下创建的数据集,其中image_train_path是图像文件路径的列表,例如。[b'/content/drive/My Drive/data/folder1/im1.png', b'/content/drive/My Drive/data/folder2/im6.png',...]. 我需要提取文件夹路径,例如,'/content/drive/My Drive/data/folder1'然后进行一些其他操作。我尝试使用以下preprocessData函数来执行此操作。

哪里preprocessData是:

但是,切片线会导致以下错误:

我在 Tf2.4 和 tf nightly 中都试过这个。我尝试@tf.functiontf.data.experimental.enable_debug_mode(). 总是给出同样的错误。

我不太明白哪个部分导致了“迭代”,尽管我猜问题是切片。有没有其他方法可以做到这一点?

0 投票
1 回答
35 浏览

tensorflow - Keras 对 tf.data 数据集的预测不会停止

我在使用生成器为我的模型进行预测时遇到了问题。根据文档,如果steps = Nonepredict 应该贯穿整个数据集。但相反,它通过了它,我重新开始。我正在使用flow_from_dataframe图像数据集。

我应该将步长固定为ceil(len(dataset) / batch_size)吗?

提前致谢!

0 投票
1 回答
476 浏览

tensorflow - Tensorflow DataSet Shuffle 影响验证训练的准确性和模棱两可的行为

我正在努力训练一个使用 tf.data.DataSet 作为输入的神经网络。

我发现,如果我.shuffle()在将整个数据集拆分为 train、val、test set 之前调用,val(在训练中)和 test(在评估中)的准确度是 91%,但是当我.evaluate()在测试集上运行多次时,准确度损失指标每次都在变化。在测试集上发生相同的行为.predict(),每次都更改类。

这是训练的输出,评估结束预测过程

因此,我尝试.shuffle()在拆分后仅在训练和验证上应用(注释主 .shuffle() 并取消注释 train_set 和 val_set 中的 shuffle)。

但在这种情况下,我发现网络仅在 5 个 epoch 后就进入了过度拟合(之前的训练过程回调以 94% 的 val 准确度阻止了 30° epoch 的训练),自 2° epoch 验证以来的准确度为 75%放。

但是,在这种情况下,如果我在尚未应用的测试集上运行.evaluate(),则指标和类在每次调用时都保持不变。.predict().shuffle ()

为什么会有这种行为?但特别是什么是伟大的方式,模型的真正准确性是什么?

谢谢

这是进程的代码

0 投票
0 回答
216 浏览

machine-learning - 在 Keras 中为 TF 数据集中的 one-hot 编码标签指定类或样本权重

我正在尝试在不平衡的训练集上训练图像分类器。为了应对类不平衡,我想对类或单个样本进行加权。加权类似乎不起作用。不知何故,对于我的设置,我无法找到指定样本权重的方法。您可以在下面阅读我如何加载和编码训练数据以及我尝试的两种方法。

训练数据加载和编码

我的训练数据存储在一个目录结构中,其中每个图像都放置在与其类对应的子文件夹中(我总共有 32 个类)。由于训练数据太大,一次全部加载到内存中,我使用 image_dataset_from_directory 并通过它描述TF Dataset中的数据:

我使用 label_mode 'categorical',以便将标签描述为one-hot 编码向量

然后我预取数据:

方法 1:指定类权重

在这种方法中,我尝试通过 fit 的 class_weight 参数指定类的类权重:

对于每个类,我们计算与该类的训练样本数成反比的权重。这是按如下方式完成的(这是在上述 train_ds.prefetch() 调用之前完成的):

我不确定这个解决方案是否有效,因为 keras 文档没有指定 class_weights 字典的键,以防标签是一次性编码的。我尝试以这种方式训练网络,但发现权重对生成的网络没有真正的影响:当我查看每个单独类的预测类分布时,我可以识别整个训练集的分布,其中对于每个类别,最有可能预测占主导地位的类别。在没有指定任何类别权重的情况下运行相同的训练会导致相似的结果。所以我怀疑权重似乎对我的情况没有影响。

这是因为指定类权重不适用于一次性编码标签,还是因为我可能做错了其他事情(在我没有在这里显示的代码中)?

方法2:指定样本权重

作为提出不同(在我看来不太优雅)解决方案的尝试,我想通过 fit 方法的 sample_weight 参数指定单个样本权重。但是从文档中我发现:

[...] 当 x 是数据集、生成器或 keras.utils.Sequence 实例时,不支持此参数,而是提供 sample_weights 作为 x 的第三个元素。

在我的设置中确实是这种情况,其中 train_ds 是一个数据集。现在我真的很难找到可以从中得出如何修改 train_ds 的文档,这样它就有了带有权重的第三个元素。我认为使用数据集的 map 方法可能很有用,但我想出的解决方案显然无效:

有没有人有一个可以与加载的数据集结合使用的解决方案image_dataset_from_directory

0 投票
1 回答
675 浏览

python - tf.data.Dataset:完成GeneratorDataset迭代器时发生错误:前置条件失败:Python解释器状态未初始化

我需要将我的数据生成器转换Sequencetf.data.Dataset格式。为此,我使用该from_generator函数为我的所有训练、验证和测试数据创建重复的 BatchedDataset。

这些用于模型拟合:

这导致了以下错误:

这很令人困惑,因为我按照建议指定了重复无限数据集的步数。steps_per_epoch此外,当我之前使用基于序列的数据生成器时,它以这种方式与指定的方式一起工作。

0 投票
0 回答
119 浏览

python - 无法将张量添加到批次:元素数量不匹配。形状是:[张量]:[125],[批次]:[149]

使用:

TensorFlow:2.4.1

蟒蛇:3.6.9

CUDA:11

CuDNN:8

使用 tf.data.Dataset 生成数据,如果批量大小为 1,则代码运行良好,但如果我增加批量大小,则会出现以下错误。我正在使用自定义 CTC 损失函数,因为它是语音识别系统那么如何解决这个错误。

这是完整的错误:

引用此示例代码:https ://www.tensorflow.org/tutorials/audio/simple_audio

0 投票
1 回答
368 浏览

python - 在tensorflow中使用`dataset.map()`访问张量numpy数组

我正在尝试从使用https://www.tensorflow.org/api_docs/python/tf/data/Dataset#map处理的张量对象访问 numpy 数组。

我收到错误:AttributeError:“张量”对象没有属性“numpy”

当我尝试访问张量时: np_array = tensor.numpy()

如果我使用:dataset.take(n),我可以访问 numpy 数组。

为了更清楚地了解我所面临的情况,这里是一个简短的可重现的谷歌 colab 中的错误示例:

https://colab.research.google.com/drive/13ectGEMDSygcyuW4ip9zrWaHO3pSxc3p?usp=sharing

张量流版本:2.4.1

更新:除了上面的 colab 之外添加代码:

更多细节在 google colab。

0 投票
1 回答
158 浏览

python-3.x - tf.data.Dataset.map() 的 Tensorflow 1.12 问题 - 使用 tf.data API 加载图像文件

我正在尝试使用 tf.data API 将图像数据集加载到 GPU 上,因为它们提供了优化的性能。但不幸的是,使用 tf.data.Dataset.map() 函数不会返回与 model.fit() 或 model.fit_generator() 兼容的数据集。假设目录树与 keras ImageDataGenerator 所需的目录树相同。

当我使用 model.fit() 函数时出现此错误

如果我不设置形状

然后 model.fit() 抱怨未知等级的张量。根据我的研究, tf.py_func() 会导致形状数据丢失,因此需要 set_shape 。

我正在尝试使用 tf.data API 加载 Cityscapes 数据集的图像文件。

谢谢你