如何使用 Keras ImageDataGenerator 来提供 pix2pix CNN 模型?
How to use Keras ImageDataGenerator for feeding a pix2pix CNN model?
我正在尝试使用 keras ImageDataGenerator 来训练 pix2pix CNN 模型。它将输入图像映射到输出图像。我们知道 keras ImageDataGenerator 可以很容易地用于图像分类,但我在训练 pix2pix 模型时遇到了问题。这是我的尝试:
自定义生成器:
class JoinedGen(tf.keras.utils.Sequence):
def __init__(self, input_gen, target_gen):
self.input_gen = input_gen
self.target_gen = target_gen
assert len(input_gen) == len(target_gen)
def __len__(self):
return len(self.input_gen)
def __getitem__(self, i):
x = self.input_gen[i]
y = self.target_gen[i]
return x, y
def on_epoch_end(self):
self.input_gen.on_epoch_end()
self.target_gen.on_epoch_end()
self.target_gen.index_array = self.input_gen.index_array
使用 ImageDataGenerator 实现:
generator = ImageDataGenerator(shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.3)
input_gen = generator.flow_from_directory(path,
classes=['area'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='training')
target_gen = generator.flow_from_directory(path,
classes=['sat'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='training')
input_gen_val = generator.flow_from_directory(path,
classes=['area'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='validation')
target_gen_val = generator.flow_from_directory(path,
classes=['sat'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='validation')
但是当我使用 input_gen.next()[0]
和 target_gen.next()[0]
请求两个训练生成器的第一张图像时,它没有给我相应的输入和输出!
正如 Keras 文档中所述,解决方案是“为 fit 和 flow 方法提供相同的种子和关键字参数 - seed = 1
”。
只需添加到flow_from_directory
方法seed = 1
。
查看 link 了解更多信息 here
我正在尝试使用 keras ImageDataGenerator 来训练 pix2pix CNN 模型。它将输入图像映射到输出图像。我们知道 keras ImageDataGenerator 可以很容易地用于图像分类,但我在训练 pix2pix 模型时遇到了问题。这是我的尝试:
自定义生成器:
class JoinedGen(tf.keras.utils.Sequence):
def __init__(self, input_gen, target_gen):
self.input_gen = input_gen
self.target_gen = target_gen
assert len(input_gen) == len(target_gen)
def __len__(self):
return len(self.input_gen)
def __getitem__(self, i):
x = self.input_gen[i]
y = self.target_gen[i]
return x, y
def on_epoch_end(self):
self.input_gen.on_epoch_end()
self.target_gen.on_epoch_end()
self.target_gen.index_array = self.input_gen.index_array
使用 ImageDataGenerator 实现:
generator = ImageDataGenerator(shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.3)
input_gen = generator.flow_from_directory(path,
classes=['area'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='training')
target_gen = generator.flow_from_directory(path,
classes=['sat'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='training')
input_gen_val = generator.flow_from_directory(path,
classes=['area'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='validation')
target_gen_val = generator.flow_from_directory(path,
classes=['sat'],
shuffle=False,
target_size=(256, 256),
class_mode=None,
batch_size=32,
subset='validation')
但是当我使用 input_gen.next()[0]
和 target_gen.next()[0]
请求两个训练生成器的第一张图像时,它没有给我相应的输入和输出!
正如 Keras 文档中所述,解决方案是“为 fit 和 flow 方法提供相同的种子和关键字参数 - seed = 1
”。
只需添加到flow_from_directory
方法seed = 1
。
查看 link 了解更多信息 here