aba*_*bab 3 python machine-learning deep-learning keras tensorflow
我一直在尝试使用 Keras 训练 CNN,并将数据增强应用于一系列图像及其分割掩码。在线示例说为了做到这一点,我应该使用 flow_from_directory() 创建两个单独的生成器,然后压缩它们。
但是,我可以只为图像和蒙版使用两个 numpy 数组,使用 flow() 函数,而是这样做:
# Create image generator
data_gen_args = dict(rotation_range=5,
width_shift_range=0.1,
height_shift_range=0.1,
validation_split=0.2)
image_datagen = ImageDataGenerator(**data_gen_args)
seed = 1
# Create training and validation generators including masks
train_generator = image_datagen.flow(images, masks, seed=seed, subset='training')
val_train_generator = image_datagen.flow(images, masks, seed=seed, subset='validation')
# Train model
model.fit_generator(train_generator, steps_per_epoch=50,
validation_data = val_train_generator,
validation_steps = 10, shuffle=True, epochs=20)
Run Code Online (Sandbox Code Playgroud)
如果没有,为什么不呢?似乎如果我运行生成器,我只能输出图像而不能输出蒙版,所以我担心它没有做我想要的。
您需要一个自定义生成器,将相同的增强应用于图像和蒙版。
KerasImageDataGenerator接受 2 个参数(图像、标签或掩码)并仅将转换应用于第一个(图像)。您可以在下面使用我的生成器:
# Create image generator
data_gen_args = dict(rotation_range=5,
width_shift_range=0.1,
height_shift_range=0.1,
validation_split=0.2)
image_datagen = ImageDataGenerator(**data_gen_args)
seed = 1
def XYaugmentGenerator(X1, y, seed, batch_size):
genX1 = gen.flow(X1, y, batch_size=batch_size, seed=seed)
genX2 = gen.flow(y, X1, batch_size=batch_size, seed=seed)
while True:
X1i = genX1.next()
X2i = genX2.next()
yield X1i[0], X2i[0]
# Train model
model.fit_generator(XYaugmentGenerator(images, masks, seed, batch_size), steps_per_epoch=np.ceil(float(len(images)) / float(batch_size)),
validation_data = XYaugmentGenerator(images_valid, masks_valid, batch_size),
validation_steps = np.ceil(float(len(images_valid)) / float(batch_size))
, shuffle=True, epochs=20)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |