Keras:如何将fit_generator与不同类型的多个输出一起使用

在具有功能API的Keras模型中,我需要调用fit_generator来使用ImageDataGenerator训练增强图像数据。问题是我的模型有两个输出:我要预测的掩码和一个二进制值,显然我只想增加输入和掩码输出,而不是二进制值。我该如何实现?

回答:

下面的示例可能是不言自明的!“虚拟”模型采用1个输入(图像),并输出2个值。该模型为每个输出计算MSE。

x = Convolution2D(8, 5, 5, subsample=(1, 1))(image_input)

x = Activation('relu')(x)

x = Flatten()(x)

x = Dense(50, W_regularizer=l2(0.0001))(x)

x = Activation('relu')(x)

output1 = Dense(1, activation='linear', name='output1')(x)

output2 = Dense(1, activation='linear', name='output2')(x)

model = Model(input=image_input, output=[output1, output2])

model.compile(optimizer='adam', loss={'output1': 'mean_squared_error', 'output2': 'mean_squared_error'})

下面的函数生成批次以在训练过程中提供模型。它采用训练数据x和标签y,其中y = [y1,y2]

batch_generator(x, y, batch_size, is_train):

sample_idx = 0

while True:

X = np.zeros((batch_size, input_height, input_width, n_channels), dtype='float32')

y1 = np.zeros((batch_size, mask_height, mask_width), dtype='float32')

y2 = np.zeros((batch_size, 1), dtype='float32')

# fill up the batch

for row in range(batch_sz):

image = x[sample_idx]

mask = y[0][sample_idx]

binary_value = y[1][sample_idx]

# transform/preprocess image

image = cv2.resize(image, (input_width, input_height))

if is_train:

image, mask = my_data_augmentation_function(image, mask)

X_batch[row, ;, :, :] = image

y1_batch[row, :, :] = mask

y2_batch[row, 0] = binary_value

sample_idx += 1

# Normalize inputs

X_batch = X_batch/255.

yield(X_batch, {'output1': y1_batch, 'output2': y2_batch} ))

最后,我们调用fit_generator()

    model.fit_generator(batch_generator(X_train, y_train, batch_size, is_train=1))

以上是 Keras:如何将fit_generator与不同类型的多个输出一起使用 的全部内容, 来源链接: utcz.com/qa/401096.html

回到顶部