如何在张量流TakeDataset上使用file_paths?

问题描述 投票:0回答:1

我正在尝试使用图像数据集构建一个图像分类器,分为两个目录,每个目录一个。

data_dir = 'experimental.data'
batch_size = 9
img_size = (160, 160)

train_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    shuffle=True,
    image_size=img_size,
    batch_size=batch_size)

val_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    shuffle=True,
    image_size=img_size,
    batch_size=batch_size)

class_names = train_ds.class_names
print(class_names)

['false', 'true']


val_batches = tf.data.experimental.cardinality(val_ds)
test_ds = val_ds.take(val_batches // 5)
val_ds = val_ds.skip(val_batches // 5)

当我开始预测我的测试/新图像时,我想将图像路径与预测一起映射到 pandas 数据帧,这样我就可以使用 python 创建一个包含分类图像副本的目录。

file_paths = train_ds.file_paths

调用 file_paths 参数在训练数据集上工作正常,但是在使用skip/take分割test/val数据集后,我收到错误。

file_paths = test_ds.file_paths

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-129-3a6769d8217f> in <module>
----> 1 file_paths = test_ds.file_paths

AttributeError: 'TakeDataset' object has no attribute 'file_paths'

有没有办法使用 file_paths 来完成这项工作?

python tensorflow dataset tensorflow-datasets tf.keras
1个回答
0
投票

您收到错误是因为

.file_paths
不是 DatasetV2 的属性。

在下一行

here
中调用
.file_paths
后,属性 tf.keras.utils.image_dataset_from_directory 将添加到 DatasetV2 对象。

因此,调用

val_ds.take(val_batches // 5)
后,返回不带
.file_paths
属性的 DatasetV2。

解决方案

file_paths=val_ds.file_paths

val_batches = tf.data.experimental.cardinality(val_ds)
test_ds = val_ds.take(val_batches // 5)
val_ds = val_ds.skip(val_batches // 5)


test_file_paths = file_paths[:val_batches // 5]
val_file_paths = file_paths[val_batches // 5:]
© www.soinside.com 2019 - 2024. All rights reserved.