Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

python - 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)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...