- Web安全之深度學習實戰
- 劉焱
- 951字
- 2019-01-03 15:37:25
1.4 Karas
Keras是一個高級別的Python神經網絡框架,能在TensorFlow或者Theano上運行。Keras的作者、谷歌AI研究員Francois Chollet宣布了一條激動人心的消息,Keras將會成為第一個被添加到TensorFlow核心中的高級別框架,這將會使Keras變成Tensorflow的默認API。
Keras的特點是:
? 可以快速簡單地設計出原型。
? 同時支持卷積網絡和循環網絡,以及兩者的組合。
? 支持任意的連接方案(包括多輸入和多輸出)。
Keras的在線文檔內容非常豐富,地址為:
https://keras.io/
1.安裝
Keras的安裝非常簡便,使用pip工具即可:
pip install keras
如果需要使用源碼安裝,可以直接從GitHub上下載對應源碼:
https://github.com/fchollet/keras
然后進入Keras目錄安裝即可:
python setup.py install
2.使用舉例
以識別MNIST數據集為例,關于MNIST數據集的詳細介紹請參考本書第5章。本章主要是給大家概要介紹如何使用Keras。
Keras自帶了MNIST數據集,使用mnist.load_data()加載即可:
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
MNIST中的圖片大小為28× 28的矩陣,為了處理方便,把28× 28的矩陣轉換成長度為784的向量:
x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255
圖片識別的結果是0~9這10個數字。通常神經網絡算法在處理時,習慣將輸出以獨熱編碼的形式展現,即所謂One-Hot編碼,又稱“一位有效編碼”。其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都有它獨立的寄存器位,并且在任意時候,其中只有一位有效。比如以二分類問題為例,結果為真表示為1,反之為0;使用獨熱編碼,結果為真表示為10,反之為01。在Karas中可以使用keras.utils.to_categorical很方便地進行轉換:
# convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes)
下面是整個環節的重點,構造一個隱藏層為2層,每層節點數分別為512、512,輸出層節點數為10的多層感知機,使用Dense函數即可完成構造全連接網絡的工作,其中第一層需要定義輸入數據的形狀,具體定義方式在input_shape屬性指定。為了避免過擬合,每層之間使用Dropout函數進行部分丟失處理,適度的丟失數據不會影響分類識別效果,就好比識別一張照片時適度遮住一部分,不會影響分類識別結果:
model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784, ))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(10, activation='softmax'))
完成多層感知機的結構定義后,就可以使用compile函數“編譯”整個網絡,讓其工作:
model.summary() model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
整個訓練過程需要定義訓練數據集和測試數據集,同時定義訓練的輪數,通常認為訓練輪數為5~20比較合適,輪數太少訓練不充分,輪數太多則訓練時間過長:
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))
最后評估整個訓練的效果,經過20輪訓練,準確率為98.12%:
score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1])
輸出結果為:
Epoch 20/20 60000/60000 [==============================] -11s - loss: 0.0201- acc: 0.9950- val_loss: 0.1224- val_acc: 0.9812 ('Test loss:', 0.12236141463853964) ('Test accuracy:', 0.98119999999999996)
- 白話網絡安全2:網安戰略篇
- DevSecOps敏捷安全
- unidbg逆向工程:原理與實踐
- 黑客大曝光:無線網絡安全(原書第3版)
- API安全實戰
- 工業互聯網安全防護與展望
- 信息系統安全檢測與風險評估
- Penetration Testing with Perl
- .NET安全攻防指南(上冊)
- 網絡安全應急響應實戰
- 編譯與反編譯技術實戰
- CTF特訓營:技術詳解、解題方法與競賽技巧
- Disaster Recovery Using VMware vSphere Replication and vCenter Site Recovery Manager
- Android Application Security Essentials
- ATT&CK與威脅獵殺實戰