rev*_*ary 5 keras tensorflow tensorflow-datasets tf.keras
我有一个模型,它以两个图像作为输入并生成单个图像作为目标输出。
我的所有训练图像数据都位于以下子文件夹中:
我可以使用keras中的ImageDataGenerator类和方法flow_from_directory来model.fit_generator训练网络吗?
我怎样才能做到这一点?因为我遇到的大多数示例都处理单个输入和基于标签的目标输出。
就我而言,我有一个非分类目标输出数据和多个输入。
请帮忙,因为您的建议非常有帮助。
一种可能性是将三者合二为一ImageDataGenerator,使用class_mode=None(这样它们就不会返回任何目标),然后使用shuffle=False(重要)。确保batch_size每个目录都使用相同的内容,并确保每个输入位于不同的目录中,目标也位于不同的目录中,并且每个目录中的图像数量完全相同。
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)
Run Code Online (Sandbox Code Playgroud)
创建自定义生成器:
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()
Run Code Online (Sandbox Code Playgroud)
使用该生成器进行训练:
my_gen = JoinedGen(gen1, gen2, gen3)
model.fit_generator(my_gen, ...)
Run Code Online (Sandbox Code Playgroud)
或者创建一个自定义生成器。它的所有结构如上所示。
| 归档时间: |
|
| 查看次数: |
5392 次 |
| 最近记录: |