机器学习项目是如何开发和部署的

29次阅读

共计 1474 个字符,预计需要花费 4 分钟才能阅读完成。

本文以一个小项目带你弄清 ML 的项目流程

这周做作业查资料时,无意中看到一个 GitHub 项目 ML-web-app,它以 PyTorch 训练 MNIST 文字识别模型为例,介绍了从 模型训练 部署上线 的整个流程。是非常好的学习项目!下图是效果图:

笔者浏览了项目的代码, 以学习为目的, 简单解读下这个项目。

模型训练

模型训练是相对独立的部分,可以由算法工程师来做。总结起来就是调用 PyTorch 接口,建立一个神经网络,然后利用 MNIST 数据进行训练,最后把训练好的模型文件存储起来,后面部署的时候要用到

服务部署

该项目使用 Flask 框架部署服务,为了方便阅读,笔者对代码进行了精简

下面的代码中,通过加载预训练好的模型数据,得到模型实例,可以进行预测:

# 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

@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 中定义了两个核心函数:

  1. 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))
        })
}
  1. showResult函数把结果渲染出来。
function showResult(resultJson){
    // show predict digit
    divOut.textContent = resultJson.prediction;
    // show probability
    document.getElementById("probStr").innerHTML =
        "Probability :" + resultJson.probability.toFixed(2) + "%";
}

总结

这个项目麻雀虽小,五脏俱全。可以帮助非算法类程序员一窥 ML 从建模到上线部署整个流程,透过火爆的趋势看清本质。

如果你对人工智能 / 机器学习感兴趣,给大家准备了福利,赠送三本周志华老师的新书《机器学习理论导引》,点击文末送书,周志华领衔撰写,历时 4 年,宝箱书问世!查看详情,或者点击某当 200-30 优惠券,百万好书任你选领取私人订制购书满减券。福利不要错过~

文章持续更新,可以微信搜索「机器学习与系统 」阅读最新内容,回复 资料 内推 考研 获取我为你准备的惊喜~

正文完
 0