本文以一個小項目帶你弄清ML的項目流程javascript
這周作做業查資料時,無心中看到一個GitHub項目ML-web-app,它以PyTorch訓練MNIST文字識別模型爲例,介紹了從模型訓練
到部署上線
的整個流程。是很是好的學習項目!下圖是效果圖:java
筆者瀏覽了項目的代碼,以學習爲目的,簡單解讀下這個項目。python
模型訓練是相對獨立的部分,能夠由算法工程師來作。總結起來就是調用PyTorch接口,創建一個神經網絡,而後利用MNIST數據進行訓練,最後把訓練好的模型文件存儲起來,後面部署的時候要用到。git
該項目使用Flask框架部署服務,爲了方便閱讀,筆者對代碼進行了精簡。程序員
下面的代碼中,經過加載預訓練好的模型數據,獲得模型實例,能夠進行預測:github
# initialize flask application app = Flask(__name__) # Read model to keep it ready all the time model = MyModel('./ml_model/trained_weights.pth', 'cpu')
核心預測API路由,路徑是/predict
。web
@app.route('/predict', methods=['GET','POST']) def predict(): results = {"prediction" :"Empty", "probability" :{}} input_img = BytesIO(base64.urlsafe_b64decode(request.form['img'])) res = model.predict(input_img) return json.dumps(results)
默認主頁是經過模板渲染的,在index.js中定義了兩個核心函數:ajax
onRecognition
函數經過Ajax向/predict
API路由發送POST請求,請求中封裝了要識別的圖片,而後獲取模型預測結果。// post data to server for recognition function onRecognition() { $.ajax({ url: './predict', type:'POST', data : {img : cvsIn.toDataURL("image/png").replace('data:image/png;base64,','') }, }).done(function(data) { showResult(JSON.parse(data)) }) }
showResult
函數把結果渲染出來。function showResult(resultJson){ // show predict digit divOut.textContent = resultJson.prediction; // show probability document.getElementById("probStr").innerHTML = "Probability : " + resultJson.probability.toFixed(2) + "%"; }
這個項目麻雀雖小,五臟俱全。能夠幫助非算法類程序員一窺ML從建模到上線部署整個流程,透過火爆的趨勢看清本質。算法
文章持續更新,能夠微信搜索「 機器學習與系統 」閱讀最新內容,回覆資料、內推、考研獲取我爲你準備的驚喜~json