Mesclar modelos sequenciais em Keras
Eu quero concatenar esses dois modelos em meu projeto, sou bastante novo neste campo, então, por favor, não me julgue muito. Então aqui está o código.
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)
E depois de obtido o modelo, quero fazer previsões.
Portanto, tenho dois conjuntos de dados, um para ataques DOS-portmap e outro para ataques DOS-UDP.
Se eu quiser prever algo, como posso distinguir entre os dois?
Respostas
Você pode usar a API funcional do Keras para isso. O modelo é basicamente igual a uma camada, pode ser chamado e pode ser incluído em outro modelo.
Por exemplo, esta é uma versão bastante simplificada de concatenar resultados de 2 modelos:
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)
Claro, você quer ter certeza de que as saídas são o resultado desejado. Portanto, a chave está na última camada, que tipo de operações você deseja fazer com os valores obtidos de y_1 e y_2.
Alguns usam uma camada personalizada para isso, você também pode usar isso. Você pode procurar mais artigos sobre API funcional e camada personalizada no documento do Tensorflow.