Mesclar modelos sequenciais em Keras

Nov 02 2020

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

YosiPramajaya Nov 02 2020 at 12:46

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.