2017-12-06 11 views
1

私は2つの事前訓練モデルを用意しています.1つは年齢分類用、もう1つはジェンダー分類用です。私は年齢別性別分類器ネットワークを作りたいので、私は2つのネットワークを統合し、同じネットワークから年齢と性別を誇張したいと思っていました。私が試したものをkeras tensoflowで2つのモデルをマージして1つのモデルを作成する方法

は、私はそれがあなたに意味「マージ」ものに依存し、両方の

答えて

1

を行う二つのモデルと鉄道ネットワークをマージすることができますどのように

from keras.models import load_model 

model_age = load_model(model_age_path) 
model_gender = load_model(model_gender_path) 

ました。持って両方のタスク(後退年齢、性別を分類) - いくつかに:

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]) 
関連する問題