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

python - 使用 tensorflow.data 生成图像和多个标签的数据集

我正在尝试训练神经网络在对象周围绘制边界框。我自己生成了数据,256x256 rgb 图像和每个图像五个标签(边界框的两个角 + 一个旋转组件)。为了在使用 python 3.7.6、tensorflow 2.0 和 keras 训练网络时不会耗尽内存,我一次只加载了少量图像。然后网络对这些进行了训练,然后加载了一组新图像。这一切都是按顺序发生的(我不是一个很好的程序员,可能不是以一种有效的方式),这给我留下了由于我加载图像和标签的方式而出现的一个非常严重的瓶颈。图像名称以数值形式给出,当前保存为 .jpg,我的标签存储在文本文件中,其中每一行对应一个图像名称。

为了减少/消除瓶颈,我已经阅读了 tf.data 并尝试按照https://www.tensorflow.org/tutorials/load_data/images#using_tfdata_for_finer_control中的示例进行操作。然而,这些示例处理分类,因此标签以不同的方式生成。我试图改变这样的代码

当我从文件中返回一行时,脚本的其余部分似乎运行良好,但我无法弄清楚如何制作它,以便每个图像都与其对应的标签配对。为了在get_label()函数中提取图像名称,我尝试使用parts.numpy()它只产生 this AttributeError: 'Tensor' object has no attribute 'numpy'

几天来,我一直试图弄清楚这一点,但找不到完全描述相同问题的帖子。

如果不是熟练的程序员,如何以有效的方式解决这个问题?任何指出我正确方向的东西都非常感谢。

编辑:我最终选择了一个不同的解决方案,该解决方案深受https://github.com/kalasuffar/tensorflow-data/blob/master/create_dataset.py示例的启发。它发现我更容易按照那里给出的示例进行操作。

0 投票
1 回答
95 浏览

tensorflow - Tensorflow 2.3 管道将所有数据加载到 RAM

我使用tf.data API 创建了管道,用于读取图像数据集。我有一个高分辨率的大数据集。但是,每次尝试读取所有数据集时,计算机都会因为代码使用所有 RAM 而崩溃。我用大约 1280 张图像测试了代码,它没有任何错误。但是当我使用所有数据集时,模型就会崩溃。所以,我想知道是否有办法让tf.data读取前面的一个或两个批次不超过这个。

这是我用来创建管道的代码:

0 投票
1 回答
376 浏览

python - 如何为 CNN 提供 tf.data.Dataset

我是张量流的新手。我正在尝试为猫和狗之间的二元分类运行卷积神经网络。

数据的结构是这样的:在一个名为data的目录中,有两个子目录:testtrain。在每个子目录中有两个(子)子目录,称为catdog

我要做的是使用 tf.data.Dataset 导入图像并运行 CNN 对它们进行分类。

按照本参考文献中建议的方法(https://towardsdatascience.com/tf-data-creating-data-input-pipelines-2913461078e2)我可以将数据导入为 Dataset 对象并将其在图像和标签之间分开(我是不确定是否正确,我只是按照上面链接中提出的方法。顺便问一下,有什么方法可以检查分离和标记过程是否正确执行?):

我有几个问题:首先,当我尝试运行 CNN 时(使用下面的脚本),它给出了一条错误消息“层序 4 的输入 0 与层不兼容:预期 ndim=4,发现 ndim=3。完整收到的形状:[None, 265, 3]”。

有人猜我做错了什么?此外,我想检查数据是否正确导入。有什么好的方法来评估吗?

我的 CNN 尝试如下所示:

提前致谢!

0 投票
1 回答
448 浏览

tensorflow - How to split a tensorflow dataset

I have a set of data stored in csv file, currently I read it out and store it np, and then transfer it into Dataset use below code

and then I want to define a generator function to get data from this dataset for train, but it looks that Dataset is not subscriptable, like numpy I can use [:2] to get the data from it, but Dataset cannot.

How can I do it?

below is my generator function when I use numpy as input(the first parameter is numpy)

I'm not sure if the Dataset can do the same thing like what I did when use numpy

I can use tf.data.Dataset.from_tensor_slices method in the end of this generator, but it was low performance even I use from_generator(generator).prefetch() method, I assume that it was because the data is very big, performance were limited by CPU to process the numpy data(I referenced to this question Tensorflow: How to prefetch data on the GPU from CPU tf.data.Dataset (from_generator)), so I want to load data as Tensor start from begining to see if this will speed up my code or not.

Thanks!

0 投票
2 回答
1118 浏览

python - tf.data.Dataset 的一个热编码标签

我正在尝试将 tf.data.Dataset 的标签转换为一个热编码标签。我正在使用这个数据集。我在列中添加了标题(情感、文本),其他一切都是原创的。

这是我用来将标签(正面、负面、中性)编码为一个热点 (3,) 的代码:

我收到错误消息:ValueError: Value [<tf.Tensor 'while/label:0' shape=(3,) dtype=float32>] is not convertible to a tensor with dtype <dtype: 'float32'> and shape (1, 3).

标签的第二个参数_map_func(text, label)的形状为 (64,) type=string。

如果我正确理解了 tensorflows tf.data.Dataset.map 函数,它会使用转换函数应用的转换创建一个新数据集。但是由于错误指出标签的列不能从具有一个字符串的列转换为具有包含 3 个浮点数的列表的列。有没有办法强制新列的类型接受编码标签?

谢谢您的帮助 :)

0 投票
2 回答
50 浏览

python - tf.data, tf.distribute 没有 GPU

我的机器上没有 GPU,因为 tensorflow 上的大多数性能建议只提到 GPU,有人可以确认一下,例如

仅适用于多 GPU 吗?我在我的电脑上尝试过,大多数功能确实减慢了进程而不是增加了进程。因此多CPU在这里没有好处吗?

0 投票
1 回答
62 浏览

machine-learning - 为什么使用 tf.data 管道训练 tensorflow 模型会产生与直接使用 EagerTensors 提供完全不同的结果?

我正在尝试建立一个管道来训练模型。首先,我使用的是“训练轮”。我将所有数据预处理为 5 个 EagerTensors——3 个用于特征,2 个用于目标。

为了论证,我们称特征张量“in_a, in_b, in_c”和目标张量“tgt_1, tgt_2”

输入张量的形状如下:

目标张量是:

如果我通过以下方式使用 .fit 方法将这些张量输入到我的模型中: training_model.fit(x=[in_a, in_b, in_c],y=[tgt_1, tgt_2],batch_size = 32, shuffle = True, epochs = 20) 我在运行拟合的时间里 100% 得到了很好的结果(输入数据在所有情况下都是相同的)

但是,我的数据超出了内存的容量,所以我很想弄清楚 tf.data.Dataset 流,这就是我遇到问题的地方。

我采用完全相同的张量并以下列方式创建一个压缩数据集:

这会产生以下 element_spec:

现在,当我将数据集输入完全相同的模型时,我会得到完全不同的结果——每次训练模型时。

training_model.fit(full_dataset, epochs = 20)

一次拟合 20 个 epoch 会产生良好的结果;再跑一次,平庸;另一个,可怕的。

我可能做错了什么?任何想法如何解决这个问题?我的意思是,数据源不会在两种输入模型的方式之间发生变化,只是用于获取模型的方法。

提前谢谢了!礁石

0 投票
1 回答
223 浏览

python - 为大型数据集计算类权重的最佳方法

我想知道为使用tf.dataAPI 构建的大型数据集计算类权重的最佳方法。考虑有关处理不平衡数据集的官方 TensorFlow 教程 - https://www.tensorflow.org/tutorials/structured_data/imbalanced_data

如果我要将它缩放到一个大小适中的图像数据集,那么我计算类权重、计算初始偏差等的策略应该是什么?

0 投票
1 回答
515 浏览

python - 从 tf.data.Dataset 获取元组的元素

我正在构建一个具有两个输入节点的神经网络,每个输入节点都连接到一个嵌入层。

我创建了一个带有元组的 tf.data.Dataset 作为模型的输入。

如何拆分元组中的张量以将第一个张量(标量)转发到嵌入层 1,将第二个张量(数组)转发到自定义前向传递中的嵌入层 2?

我在下面提供了一个示例。

提前致谢。

0 投票
1 回答
142 浏览

tensorflow - Tensorflow:如何在从 tfrecord 文件读取图像以进行数据增强后设置张量形状?

我有一个从文件tf.data.Dataset中读取的tfrecords文件,如下所示:

接下来,我将这些特征组合成一个图像,如下所示:

此时,数据集中的任何图像都有形状(None, None, None)(这让我感到惊讶,因为我重塑了它们)。当我尝试使用以下方法扩充数据集时,我认为这是导致错误的原因tf.keras.preprocessing.image.ImageDataGenerator

这会导致错误消息:

但是,如果我不使用图形模式,而是使用渴望模式,这就像一个魅力:

这使我得出结论,主要错误是读取数据集后缺少形状信息。但我不知道如何比我已经做的更明确地定义它。有任何想法吗?