简体   繁体   English

在 Keras 中合并多个模型(tensorflow)

[英]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.我有两个模型,两个模型都可以检测 2-2 个类。 As we know that we can merge two models using a FunctionalAPI.众所周知,我们可以使用 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).我的目标:我想合并这些模型,更新后的模型应该有(1 个输入,4 个输出)。

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.据我了解,您要对 4 个类别进行分类,为此,您有 2 个模型,每个模型对 2 个类别进行分类。
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 .截至目前,您的 f1 和 f2 模型输出softmax activation的结果,因此首先,您必须将其删除并仅输出 logits 或仅输出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.后由@ DMG2如前所述,必须设置axis=1tf.concat现在在端你必须通过新的传递输出softmax活化。 After that, I hope you could train your model.在那之后,我希望你能训练你的模型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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