Tensorflow加载未标记的本地数据



假设我正在训练一个自动编码器(所以我需要定义输入数据集,以及目标输出)。我需要一个只有图像(没有标签)的数据集。

我尝试过使用flow_from_directory(),但它给数据集分配了一个类,当传入训练时,它会与目标数据碰撞,产生错误。

所以我想我需要的是将我的本地图像转换成具有tensorflow_datasets.mnist结构的数据集。

<标题>文件夹结构:
/data
/low
-0.png
-1.png
-...
/high
-0.png
-1.png
-...

我试过了:

low_generator = keras.preprocessing.image.ImageDataGenerator(
rescale=1/255.0,
validation_split=0.2
)
# when path is directly to the image folder - no images found
# when path is to parent folder, specifying which folder to use - it assigns labels too
train_low_iterator = low_generator.flow_from_directory(
# 'path to parent directory'
'path to directory',
target_size=(480, 270),
batch_size=10,
class_mode='input',
subset='training',
# add this when path is to parent
# classes=['low']
)
validation_low_iterator = low_generator.flow_from_directory(
'same as above',
target_size=(480, 270),
batch_size=10,
class_mode='input',
subset='validation',
# same as above
classes=['low']
)
# analogic to above
high_generator
train_high_iterator
validation_high_iterator

Class_modeNone

源代码说,如果None被用作class_mode,它将不会产生标签。源

但是这两个例子都不起作用(和以前一样,要么什么也没找到,要么又产生了标签:

iterator = generator.flow_from_directory(
'parent_path',
class_mode=None,
classes=['something']
)
iterator = generator.flow_from_directory(
'parent_path',
classes=['something']
)
iterator = generator.flow_from_directory(
'direct_path',
class_mode=None
)
iterator = generator.flow_from_directory(
'direct_path'
)

我也试过image_dataset_from_directory()

train_low_dataset = keras.utils.image_dataset_from_directory(
'path/low',
labels = None,
label_mode = None,
color_mode = 'rgb',
batch_size = 32,
image_size = (480, 270),
shuffle = False,
validation_split = 0.2,
subset = 'training'
)

这是能够加载所有的数据,返回一个数据集,但它抛出一个错误(在火车启动时):

raise ValueError("'y' argument is not supported when using " ValueError: 'y' argument is not supported when using python generator as input.

我现在无法解决(因为我需要使用输入和输出数据,以及训练和验证)。

<标题>培训
model.fit(
train_low_iterator, train_high_iterator,
epochs=15,
batch_size=8,
shuffle=True,
validation_data=(validation_low_iterator, validation_high_iterator)
)

我试图创建一个自定义生成器函数(一个花哨的for循环与yield在最后),但不成功(我将在未来重试,并将更新这个答案,如果我得到它正常工作)。

figure out: so link

然而,有效的是将生成器对象转换为numpy array

文件夹结构与题中相同。

<标题>创建迭代器
low = np.array([cv2.imread(f.path) / 255 for f in os.scandir("/data/low")])
high = np.array([cv2.imread(f.path) / 255 for f in os.scandir("/data/high")])
train_low = low[:205]
validate_low = low[205:]
train_high = high[:205]
validate_out = high[205:]
<标题>培训
model.fit(x=train_low, y=train_high,
epochs=10,
batch_size=1,
shuffle=True,
validation_data=(validate_low, validate_high),
)

相关内容

  • 没有找到相关文章

最新更新