【FATE】MNIST手寫數字識別——卷積神經網絡

1 環境配置

操作系統:macOS Sierra 10.12.6
docker版本:19.03.8
FATE版本:單機版1.3
python版本:3.6.10
tensorflow:1.15.2
keras版本:2.3.0

2 準備數據

數據的準備與上傳參考上一篇文章【FATE】MNIST手寫數字識別——全連接網絡
本次實踐基於上次準備好的數據,不用再進行上傳操作

3 編輯運行配置文件

3.1 搭建模型

首先進入python解釋器:

python

由於 FATE 目前只接受一維數據輸入,所以在模型搭建一開始我們添加一個Reshape層,用於把一維數據轉換成卷積層需要接受的數據格式。

model.add(Reshape((28,28,1), input_shape=(784,)))

搭建卷積神經網絡的全部過程:

import keras
from keras.models import Sequential
from keras.layers import Reshape, Dense, Conv2D, Flatten, MaxPooling2D
model = Sequential()
model.add(Reshape((28,28,1), input_shape=(784,)))
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))

得到json格式的模型:

json = model.to_json()
print(json)

拷貝輸出的一長串 json,退出python解釋器:

exit()

3.2 修改運行配置文件

進入配置文件,將剛剛輸出的json格式的模型拷貝到algorithm_parameters:homo_nn_0:[$nn_define]位置:

vi examples/federatedml-1.x-examples/homo_nn/test_homo_nn_keras_temperate.json

修改超參數(可自行調整):

"batch_size": 64,
"optimizer": {
  "optimizer": "RMSprop",
  "learning_rate": 0.01
},
"early_stop": {
  "early_stop": "diff",
  "eps": 1e-5
},
"loss": "categorical_crossentropy",
"max_iter": 8

4 編輯DSL配置文件

使用自帶的DSL配置文件,路徑:

fate/examples/federatedml-1.x-examples/homo_nn/test_homo_nn_train_then_predict.json

5 開始訓練任務

命令:

python fate_flow/fate_flow_client.py -f submit_job -c examples/federatedml-1.x-examples/homo_nn/test_homo_nn_keras_temperate.json -d examples/federatedml-1.x-examples/homo_nn/test_homo_nn_train_then_predict.json

6 結果

登錄到FateBoard查看訓練任務情況,通過log查看訓練過程中損失和精度的變化情況。
在這裏插入圖片描述
損失達到了0.17左右,精度達到了0.97左右,效果好於之前的全連接網絡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章