我为我的数据集(具有800000个条目)创建了一个二进制分类的神经网络模型,其中包含恶意的(具有不同的攻击类型)和良性数据流量。 我希望将其用作预训练模型,并将转移学习应用于由新的攻击类型(分类为恶意)数据和某些良性数据组成的小型数据集。
这是预训练模型的代码:
preTrain_model= Sequential()
preTrain_model.add(tf.keras.layers.Dense(20, activation='relu', input_dim=11))
preTrain_model.add(tf.keras.layers.Dense(20, activation='relu'))
preTrain_model.add(tf.keras.layers.Dense(2, activation='softmax'))
preTrain_model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd',
metrics=['accuracy'])
preTrain_model.fit(X_training, Y_train, validation_data= (X_testing,Y_test) ,epochs=1, batch_size=1, verbose=2, callbacks= [monitor])
score1= preTrain_model.evaluate(X_training, Y_train)
该模型训练得很好,并且提供了大约93%的准确性。
但是,使用预训练模型的新模型的准确性与仅在新数据集上训练的模型的准确性相同(大约57%)。
以下是使用预训练模型的模型:
myadam= tf.keras.optimizers.Adam(learning_rate=0.001)
model6= Sequential()
model6.add(preTrain_model)
model6.add(Dense(20, activation='relu', input_dim=11))
model6.add(Dense(20, activation='relu'))
model6.add(Dense(2, activation='sigmoid'))
model6.compile(loss='sparse_categorical_crossentropy', optimizer=myadam,
metrics=['accuracy'])
model6.fit(X_train_6, Y_train_6, validation_data=(X_test_6,Y_test_6), epochs=20, batch_size=5, verbose=2)
score62= model6.evaluate(X_test_6, Y_test_6)
print('Test Accuracy: %0.2f%%' % (score62[1] * 100))
这是一个不使用预训练模型的模型:
model61=Sequential()
model61.add(Dense(20, activation='relu', input_dim=11))
model61.add(Dense(20, activation='relu'))
model61.add(Dense(2, activation='softmax'))
model61.compile(loss='sparse_categorical_crossentropy', optimizer=myadam,
metrics=['accuracy'])
model61.fit(X_train_6, Y_train_6, validation_data= (X_test_6, Y_test_6),epochs=20, batch_size=5, verbose=2)
score621= model61.evaluate(X_test_6, Y_test_6)
print('Test Accuracy: %0.2f%%' % (score621[1] * 100))
我目前正在学习有关转移学习和tensorflow / keras的知识,任何指导或指导将不胜感激。另外,请告知是否需要进一步说明。谢谢。