【发布时间】:2022-01-04 19:10:28
【问题描述】:
我想将 tensorflow 数据集中的数据一致地提取到 numpy 数组/张量中。我正在加载图片和
data = keras.preprocessing.image_dataset_from_directory(
'./data',
labels='inferred',
label_mode='binary',
validation_split=0.2,
subset="training",
image_size=(img_height, img_width),
batch_size=sz_batch,
crop_to_aspect_ratio=True
)
我已经得到了使用以下行的提示:
xdata = np.concatenate([x for x, y in data], axis=0)
ydata = np.concatenate([y for x, y in data], axis=0)
然而,问题是xdata 和ydata 中提取的数据不一致,因此ydata 中的标签不适合xdata 中的样本(我通过简单地检查了这一点循环提取的数据)。
我的第二个想法是在标准 for 循环中提取数据:
xdata = np.empty([sz1, sz2, 3])[np.newaxis,...]
ydata = np.array([0])
for images, labels in val_ds:
xdata = np.concatenate((xdata, images), axis=0)
ydata = np.concatenate((ydata, labels), axis=0)
xdata = xval[1:]
ydata = yval[1:]
尽管数据似乎与这种方法一致,但我认为这种方法相当繁琐,而且写得也不好(而且可能效率也不高)——尤其是最后两行让我很困扰。但是我无法想出一种更简单的方法来提取数据并将提取的数据堆叠在 numpy 数组/张量中。
如果能在 python 中正确解决这个问题,我会非常感激。
无论如何,我想知道为什么处理 tensorflow 数据集至少在我看来真的很麻烦。首先,我需要解决上述问题,以便在其他例程中使用数据,而不是在 tensorflow 中。其次,即使我在 tensorflow 训练以外的任何地方使用数据,我的选择也不是很简单。例如。如果我想将来自 NN 的预测标签与来自数据集的真实标签进行比较,我无法轻松提取该数据集的一致标签。我必须在 for 循环中分别预测每个样本。
注意:我不会/不能使用tfds
【问题讨论】:
-
如果数据集被洗牌,您需要对其进行迭代。您可以使用列表而不是数组进行追加。
标签: python numpy tensorflow tensorflow-datasets