Keras ImageDataGenerator用于多个输入和基于图像的目标输出 [英] Keras ImageDataGenerator for multiple inputs and image based target output
问题描述
我有一个模型,该模型将两个图像作为输入,并生成一个图像作为目标输出.
I have a model which takes two Images as inputs and generates a single image as a Target output.
我所有的训练图像数据都在以下子文件夹中:
All of my training image-data is in the following sub-folders:
- input1
- input2
- 目标
我可以在keras中使用ImageDataGenerator
类和诸如flow_from_directory
和model.fit_generator
方法的方法来训练网络吗?
Can I use the ImageDataGenerator
class and methods like flow_from_directory
and model.fit_generator
method in keras to train the network?
我该怎么做?因为我遇到的大多数示例都涉及单个输入和基于标签的目标输出.
How can I do this? since most examples I have come across deal with single input and a label-based target output.
就我而言,我有一个非分类目标输出数据和多个输入.
In my case, I have a non-categorical target output data and multiple inputs.
请提供帮助,因为您的建议可能会很有帮助.
Please help, as your suggestions can be really helpful.
推荐答案
一种可能性是使用class_mode=None
(这样它们就不会返回任何目标)并使用shuffle=False
(重要的).确保每个输入都使用相同的batch_size
,并确保每个输入都位于不同的目录中,并且目标也位于不同的目录中,并且每个目录中的图像数量完全相同.
One possibility is to join three ImageDataGenerator
into one, using class_mode=None
(so they don't return any target), and using shuffle=False
(important). Make sure you're using the same batch_size
for each and make sure each input is in a different dir, and the targets also in a different dir, and that there are exactly the same number of images in each directory.
idg1 = ImageDataGenerator(...choose params...)
idg2 = ImageDataGenerator(...choose params...)
idg3 = ImageDataGenerator(...choose params...)
gen1 = idg1.flow_from_directory('input1_dir',
shuffle=False,
class_mode=None)
gen2 = idg2.flow_from_directory('input2_dir',
shuffle=False,
class_mode=None)
gen3 = idg3.flow_from_directory('target_dir',
shuffle=False,
class_mode=None)
创建自定义生成器:
class JoinedGen(tf.keras.utils.Sequence):
def __init__(self, input_gen1, input_gen2, target_gen):
self.gen1 = input_gen1
self.gen2 = input_gen2
self.gen3 = target_gen
assert len(input_gen1) == len(input_gen2) == len(target_gen)
def __len__(self):
return len(self.gen1)
def __getitem__(self, i):
x1 = self.gen1[i]
x2 = self.gen2[i]
y = self.gen3[i]
return [x1, x2], y
def on_epoch_end(self):
self.gen1.on_epoch_end()
self.gen2.on_epoch_end()
self.gen3.on_epoch_end()
使用此生成器进行训练:
Train with this generator:
my_gen = JoinedGen(gen1, gen2, gen3)
model.fit_generator(my_gen, ...)
或创建一个自定义生成器.上面显示了其所有结构.
Or create a custom generator. All the structure for it is shown above.
这篇关于Keras ImageDataGenerator用于多个输入和基于图像的目标输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!