您可以像往常一样使用 ImageDataGenerator。您将不得不使用 Keras 功能 API。让我们看一下这个示例,我们将在其中使用迁移学习,但我将保持与您的网络相同的末端结构。
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(400,400,3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Flatten(x)
x1 = Dense(1024, activation='relu')(x)
output1 = Dense(20,activation='softmax', name='toutput')(x1)
y = Dense(512, activation='relu')(x)
y = Dense(512, activation='relu')(y)
output2 = Dense(2,activation='softmax', name='r_output')(y)
output3 = Dense(4, activation='sigmoid', name='ri_output')(y)
output4 = Dense(12, activation='softmax', name='li_output')(y)
现在网络有 4 个输出,就像你的图片一样。现在我们可以编译并为每个输出提供自己的损失函数。我们可以通过其“名称”来引用每个输出。
optimizer = Adam(learning_rate=.0001)
losses = {
'toutput': 'categorical_crossentropy',
'r_output': "mean_absolute_error",
'ri_output': "mean_absolute_error",
'li_output': "mean_squared_error",
}
如果你想要特定的指标,你可以这样做:
model.compile(optimizer=optimizer, loss=losses, metrics={'toutput':'accuracy', ...)