这取决于“合并”对您意味着什么。
如果您想从单个输入中输出年龄和性别,那么您需要多个“头”:
from keras import Input
from keras.models import load_model
model_age = load_model('age.hdf5')
model_gender = load_model('gender.hdf5')
x = Input(shape=[299, 299, 3])
y_age = model_age(x)
y_gen = model_gender(x)
model = Model(inputs=x, outputs=[y_age, y_gen])
data, target = load_data()
p_age, p_gender = model.predict(data)
print(p_age)
# [[ 0.57398415, 0.42601582],
# [ 0.5397228 , 0.46027723],
# [ 0.6648131 , 0.33518684],
# [ 0.5917415 , 0.4082585 ]]
print(p_gender)
# [[ 0.13119246],
# [ 0. ],
# [ 0.1875571 ],
# [ 0. ]]
但现在考虑一下:这两项任务(年龄回归、性别分类)在某种程度上都有一定程度的相似性,对吧?例如,如果您的数据由图像组成,则两者都需要检测线条、补丁和简单的几何形式才能做出决定。换句话说,两个网络都可以重用许多卷积层的权重,从而使整个过程更加高效。
您可以通过训练一个同时完成这两件事的新模型来实现此目的:
from keras.applications import VGG19
base_model = VGG19(weights='imagenet') # or any model, really.
y = base_model.output
y_age = Dense(1, activation='relu')(y)
y = base_model.output
y = Dense(128, activation='relu')(y)
y = Dense(128, activation='relu')(y)
y_gender = Dense(2, activation='softmax')(y)
model = Model(inputs=base_model.inputs, outputs=[y_age, y_gender])