Python 将多个ImageDataGenerator的输出合并到一个张量
假设我想在两个Python 将多个ImageDataGenerator的输出合并到一个张量,python,tensorflow,keras,Python,Tensorflow,Keras,假设我想在两个ImageDataGenerators中对图像应用两个不同的预处理函数,然后将这些输出连接到一个张量以训练模型 i、 例如,如果我有RGB图像,我的模型预计输入张量中有六个通道,因为我想连接两个生成器的输出(每个生成器将有三个通道) 具体地说: # first preproc function def preproc_function_1(image): image = np.array(image) return image * 0.1 # second pre
ImageDataGenerator
s中对图像应用两个不同的预处理函数
,然后将这些输出连接到一个张量以训练模型
i、 例如,如果我有RGB图像,我的模型预计输入张量中有六个通道,因为我想连接两个生成器的输出(每个生成器将有三个通道)
具体地说:
# first preproc function
def preproc_function_1(image):
image = np.array(image)
return image * 0.1
# second preproc function
def preproc_function_2(image):
image = np.array(image)
return image * 0.2
# datagen_1 - that applies preproc_function_1
train_datagen_1 = ImageDataGenerator(
preprocessing_function=preproc_function_1)
# datagen_2 - that applies preproc_function_2
train_datagen_2 = ImageDataGenerator(
preprocessing_function=preproc_function_2)
如果我们有这样的并行ImageDataGenerator
s,我想我们也要使用两个验证生成器
validation_datagen_1 = ImageDataGenerator()
validation_datagen_2 = ImageDataGenerator()
问题:
如何继续使用model.fit_generator()
我想我必须使用.flow\u from\u directory()
(我的数据可以从flow\u from\u directory
)来提供生成器来训练模型
是否需要从目录()创建两个.flow\u对象?我在这里迷路了
非常感谢您提供的任何帮助如果您只需创建一个预处理函数,就更容易了:
def preproc(image):
return np.concatenate([
preproc_function_1(image),
preproc_function_2(image)
], axis=-1) #or axis=1 if channels_first
方案2-使用两台发电机
由于存在6通道问题,此自定义生成器应该可以工作。但您将没有“预处理”,而是有“后处理”:
class Processor(keras.utils.Sequence):
def __init__(self, keras_generator)
self.keras_generator = keras_generator
def __len__(self):
return len(self.keras_generator(
def __getitem__(self, i):
batch_x, batch_y = self.keras_generator[i]
#do batch processing here
return processed_batch_x, batch_y
def on_epoch_end(self):
self.keras_generator.on_epoch_end()
custom_generator = Processor(validation_datagen.flow_from_directory(...))
嗨@Daniel Möller谢谢你的回答!。我已经使用组合预处理功能创建了一个onetrain\u datagen
和一个onevalid\u datagen
ImageDataGenerator
对象。但是我不知道从那时起如何使用train\u datagen.flow\u from\u directory()
和model.fit\u generator()
。调用model.fit\u generator()
时,我遇到了以下错误:ValueError:无法将输入数组从形状(150150,6)广播到形状(150150,3)
。我认为这是因为使用了TBC。根据文档,flow\u from\u directory()
方法的输出是一个DirectoryIterator,产生(x,y)元组,其中x是一个numpy数组,包含一批具有形状的图像(批大小,*目标大小,通道)
。如何将目标深度指定为6?我在目录中的图像是RGB,所以我认为这默认为3。在调试时,我可以看到错误在wherebatch_x.shape
=32150150,3和x.shape
=150150,6中返回。我知道如何从这里开始?而且,这里似乎有一个问题:这是因为您的模型需要3个通道<代码>输入形状