Fusionner les modèles séquentiels dans Keras
Je veux concaténer ces deux modèles dans mon projet, je suis assez nouveau dans ce domaine donc ne me jugez pas trop fort. Voici donc le code.
model2 = Sequential()
model2.add(Dense(10, input_dim=df2_x.shape[1], activation='relu'))
model2.add(Dense(50, input_dim=df2_x.shape[1], activation='relu'))
model2.add(Dense(10, input_dim=df2_x.shape[1], activation='relu'))
model2.add(Dense(1, kernel_initializer='normal'))
model2.add(Dense(df2_y.shape[1],activation='softmax'))
model2.compile(loss='categorical_crossentropy', optimizer='adam')
monitor2 = EarlyStopping(monitor='val_loss', min_delta=1e-3,
patience=5, verbose=1, mode='auto',
restore_best_weights=True)
model2.fit(df2_x_train,df2_y_train,validation_data=(df2_x_test, df2_y_test),
callbacks=[monitor2],verbose=2,epochs=1000)
model = Sequential()
model.add(Dense(10, input_dim=df_x.shape[1], activation='relu'))
model.add(Dense(50, input_dim=df_x.shape[1], activation='relu'))
model.add(Dense(10, input_dim=df_x.shape[1], activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
model.add(Dense(df_y.shape[1],activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3,
patience=5, verbose=1, mode='auto',
restore_best_weights=True)
model.fit(df_x_train,df_y_train,validation_data=(df_x_test, df_y_test),
callbacks=[monitor],verbose=2,epochs=1000)
Et après le modèle obtenu, je veux faire des prédictions.
J'ai donc deux ensembles de données, un pour les attaques DOS-portmap et un pour les attaques DOS-UDP.
Si je veux prédire quelque chose, comment puis-je distinguer les deux?
Réponses
Vous pouvez utiliser l'API fonctionnelle Keras pour cela. Le modèle est fondamentalement identique à un calque, il est appelable et peut être inclus dans un autre modèle.
Par exemple, il s'agit d'une version grandement simplifiée de la concaténation des résultats de 2 modèles:
inputs = keras.Input(input_shape)
y_1 = model1(inputs)
y_2 = model2(inputs)
outputs = tf.concat([y_1, y_2], axis=0)
new_model = keras.Model(inputs, outputs)
Bien sûr, vous voulez vous assurer que les sorties correspondent au résultat souhaité. Par conséquent, la clé se trouve dans la dernière couche, quel type d'opérations vous voulez faire avec les valeurs que vous obtenez de y_1 et y_2.
Certains utilisent une couche personnalisée pour cela, vous pouvez également l'utiliser. Vous pouvez rechercher plus d'article sur l'API fonctionnelle et la couche personnalisée dans le document Tensorflow.