国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 網(wǎng)站安全 > 正文

使用keras做SQL注入攻擊的判斷(實(shí)例講解)

2024-09-06 18:38:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文是通過(guò)深度學(xué)習(xí)框架keras來(lái)做SQL注入特征識(shí)別, 不過(guò)雖然用了keras,但是大部分還是普通的神經(jīng)網(wǎng)絡(luò),只是外加了一些規(guī)則化、dropout層(隨著深度學(xué)習(xí)出現(xiàn)的層)。

基本思路就是喂入一堆數(shù)據(jù)(INT型)、通過(guò)神經(jīng)網(wǎng)絡(luò)計(jì)算(正向、反向)、SOFTMAX多分類(lèi)概率計(jì)算得出各個(gè)類(lèi)的概率,注意:這里只要2個(gè)類(lèi)別:0-正常的文本;1-包含SQL注入的文本

文件分割上,做成了4個(gè)python文件:

util類(lèi),用來(lái)將char轉(zhuǎn)換成int(NN要的都是數(shù)字類(lèi)型的,其他任何類(lèi)型都要轉(zhuǎn)換成int/float這些才能喂入,又稱為feed)

data類(lèi),用來(lái)獲取訓(xùn)練數(shù)據(jù),驗(yàn)證數(shù)據(jù)的類(lèi),由于這里的訓(xùn)練是有監(jiān)督訓(xùn)練,因此此時(shí)需要返回的是個(gè)元組(x, y)

trainer類(lèi),keras的網(wǎng)絡(luò)模型建模在這里,包括損失函數(shù)、訓(xùn)練epoch次數(shù)等

predict類(lèi),獲取幾個(gè)測(cè)試數(shù)據(jù),看看效果的預(yù)測(cè)類(lèi)

先放trainer類(lèi)代碼,網(wǎng)絡(luò)定義在這里,最重要的一個(gè),和數(shù)據(jù)格式一樣重要(呵呵,數(shù)據(jù)格式可是非常重要的,在這種程序中)

import SQL注入Dataimport numpy as npimport kerasfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activationfrom keras.layers.normalization import BatchNormalizationfrom keras.optimizers import SGD x, y=SQL注入Data.loadSQLInjectData()availableVectorSize=15x=keras.preprocessing.sequence.pad_sequences(x, padding='post', maxlen=availableVectorSize)y=keras.utils.to_categorical(y, num_classes=2) model = Sequential()model.add(Dense(64, activation='relu', input_dim=availableVectorSize))model.add(BatchNormalization())model.add(Dropout(0.3))model.add(Dense(64, activation='relu'))model.add(Dropout(0.3))model.add(Dense(2, activation='softmax')) sgd = SGD(lr=0.001, momentum=0.9)model.compile(loss='mse', optimizer=sgd, metrics=['accuracy']) history=model.fit(x, y,epochs=500,batch_size=16) model.save('E://sql_checker//models//trained_models.h5')print("DONE, model saved in path-->E://sql_checker//models//trained_models.h5") import matplotlib.pyplot as pltplt.plot(history.history['loss'])plt.title('model loss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train', 'test'], loc='upper left')plt.show()

先來(lái)解釋上面這段plt的代碼,因?yàn)樽钊菀捉忉專@段代碼是用來(lái)把每次epoch的訓(xùn)練的損失loss value用折線圖表示出來(lái):

  

何為訓(xùn)練?何為損失loss value?

訓(xùn)練的目的是為了想讓網(wǎng)絡(luò)最終計(jì)算出來(lái)的分類(lèi)數(shù)據(jù)和我們給出的y一致,那不一致怎么算?不一致就是有損失,也就是說(shuō)訓(xùn)練的目的是要一致,也就是要損失最小化

怎么讓損失最小化?梯度下降,這里用的是SGD優(yōu)化算法:

from keras.optimizers import SGD sgd = SGD(lr=0.001, momentum=0.9)model.compile(loss='mse', optimizer=sgd, metrics=['accuracy'])
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 托里县| 葫芦岛市| 辉县市| 阳高县| 遂川县| 宜兰县| 安吉县| 隆尧县| 仁化县| 东城区| 桑日县| 马尔康县| 克拉玛依市| 山西省| 旬邑县| 万源市| 天祝| 海兴县| 共和县| 韩城市| 株洲市| 巨野县| 福安市| 张家口市| 铜川市| 孟连| 云浮市| 尤溪县| 平塘县| 武城县| 门源| 扶绥县| 仲巴县| 大关县| 商洛市| 齐河县| 定日县| 鹿泉市| 芦山县| 天峻县| 建湖县|