简体   繁体   中英

Merge multiple Models in Keras (tensorflow)

After doing a lot of effort here is my question,

I have two models, both models can detect 2-2 classes. As we know that we can merge two models using a FunctionalAPI. I tried it, But I am not getting the desired outcome.

My goal: I want to Merge these models, and the updated model should have (1 input, 4 output).

inputs = tf.keras.Input(shape=(50,50,1))
y_1 = f1_Model(inputs)
y_2 = f2(inputs)
outputs = tf.concat([y_1, y_2], axis=0)
new_model = keras.Model(inputs, outputs)
new_model.summary()
Model: "functional_5"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_2 (InputLayer)            [(None, 50, 50, 1)]  0                                            
__________________________________________________________________________________________________
sequential (Sequential)         (None, 2)            203874      input_2[0][0]                    
__________________________________________________________________________________________________
sequential_1 (Sequential)       (None, 2)            203874      input_2[0][0]                    
__________________________________________________________________________________________________
tf_op_layer_concat (TensorFlowO [(None, 2)]          0           sequential[1][0]                 
                                                                 sequential_1[1][0]               
==================================================================================================
Total params: 407,748
Trainable params: 407,748
Non-trainable params: 0
__________________________________________________________________________________________________

When I pass an image in it, it gives the wrong result. I don't know where did I go wrong.

prediction = new_model.predict([prepare(img)]) 
prediction

# index_pred=np.argmax(prediction) (this should return from 0 to 3, but not happening)
 

array([[1., 0.],
       [1., 0.]], dtype=float32)

From what I understand you want to classify 4 classes and for that, you have 2 models which classify 2 classes each.
As of now, your f1 and f2 model outputs the result of softmax activation so first, you have to remove it and output just the logits or just relu activation . After that as mentioned by the @dmg2, you have to set the axis=1 in the tf.concat now at the end you have to pass the output through a new softmax activation. After that, I hope you could train your model.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM