利用-TensorFlow-构建卷积神经网络

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


我记得在我最初采用机器学习进行项目实践的几天,我花了很多的时间去构建一个很好的模型。我请教了很多的算法专家,让它们对我的模型提出建议,并且优化我的特征提取,以获得最好的性能。但是,我遇到了一个严重的问题,那就是我如何在现实生活中应用这个模型?我查阅了很多的文献,但是大家都是在讨论如何对模型进行修改优化,我也询问了很多一线的算法工作人员,但是大家给我的答案都是去搭建一个很庞大的基础平台,然后采用服务器集群或者分布式去现实应用。但是这些根本就不适合我这种初入门的学习者。

那么,如何采用一个简单的方式可以达到我们的目的呢?这也是我们这篇文章需要解决的问题。在接下来的文章中,我会给大家介绍如何采用 Flask 框架来设计一个简单的机器学习模型 API,然后我们可以在别的地方调用这个 API 来实现模型的应用。

目录

  1. 应用一个机器学习的方式
  2. 什么是 API ?
  3. Python 环境设置和 Flask 基础介绍
  4. 创建机器学习模型
  5. 保存机器学习模型:序列化和反序列化
  6. 使用 Flask 创建一个 API

1. 应用一个机器学习的方式

在大多数情况下,我们的机器学习模型并非处在产品的核心,比如只是自动邮件系统或者聊天机器人的一小部分,这是没有办法的局面。在很多的情况下,我们都会使用 R 或者 Python 语言俩进行实验。但是那些模型的应用者(开发工程师)都是不同语言的软件工程师,那么这时候如果要应用我们的模型,就只有两种方式来解决这个问题:

  • 方法 1:我们采用软件工程师所采用的语言来重写我们整个模型。这个看起来是一个不错的选择,但是作为算法工程师去用新的语言重构整个模型所需要的时间和精力是非常巨大的,而且是有点浪费的。像 JavaScript 这种语言并没有很好的机器学习库来支撑我们,所有放弃这种想法吧。

  • 方法 2:设计 API 方法。Web API 的设计使得在同一个应用程序中使用不同的编程语言就显得非常简单。如果前端开发人员需要使用机器学习模型来构建一个 Web 小应用,那么他们只需要从 API 服务器中获取响应的 API 接口就可以,这就会显得非常简单,所以我们也推荐使用这种方法。

2. 什么是 API ?

简单来说,API 是一个连接不同软件应用之间的桥梁,比如一个软件程序作为数据的产生地,然后另一个软件程序需要使用这些数据。API 就是起到链接这两者的作用。

你可以阅读这篇文章,来了解为什么 API 在开发人员中那么热门?

大多数大型云计算提供商和小型机器学习算法提供商都会提供很健全的 API 接口,这也是他们为了那些没有机器学习专业知识的开发者(或者企业)专门开发的,他们可以帮助他们在产品流程中使用机器学习。

Google Vision API 就是这样一个 Web API 的例子。

你所要做的只是通过 Google 提供的 SDK(软件开发工具包)对 API 进行简单的调用。

这是不是听起来非常棒!!在本文中,我们就是要实现这个非常棒的事情,我们会利用 Flask(Python 中的 Web 框架)创建自己的机器学习 API。

注意:Flask 不是唯一可用的 Web 框架,还有 Django,Falcon,Hug 等等。对于 R 语言,我们有一个叫做 plumber 的包。

3. Python 环境设置和 Flask 基础介绍

  • 使用 Anaconda 创建一个虚拟环境。如果你需要在 Python 中创建工作流,并且将相关环境分离或者共享出来,那么 Anaconda 将是一个非常不错的选择。
    • 你可以从这里下载 miniconda 来进行安装使用。
    • wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
    • bash Miniconda3-latest-Linux-x86_64.sh
    • 按照问题的序列进行处理;
    • source .bashrc
    • 如果你运行 conda,你应该就能看到一些命令列表和帮助了;
    • 如果你要创建一个新环境,请运行:conda create –name python=3.6
    • 创建好之后,请启动这个环境:source activate
    • 安装一些你需要的包,在这里最重要的是两个:flask 和 tensorflow。
  • 我们在这里使用 Flask 编写一个最简单的 Hello-World 应用。
    • 你可以使用你最喜欢的编辑器来创建一个 hello-world.py 文件,并且进行编写。
    • 编写如下代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask

app = Flask(__name__)

@app.route('/users/<string:username>')
def hello_world(username=None):
    return ("hello {}!".format(username))


if __name__ == "__main__":
    app.run(host='0.0.0.0')
  • 保存这个文件,并且返回到终端页面
  • 之后,我们来启动这个服务,执行 python hello-world.py
  • 我们可以在浏览器中访问:http://YOUR_IP:5000/users/Ann,得到如下图:

Wow!!你顺利编写了你的第一个 Flask 应用程序。正如你刚刚所经历的几个简单步骤,我们就能在服务器上面创建一个简单的 API 了。

使用 Flask ,我们可以很容易的包装我们的机器学习模型,并且把它作为一个 API 进行服务提供。而且,如果我们想创建一些更加复杂的 web 服务器,那么我们也只需要在上面的应用中添加一些修改就可以了。

4. 创建机器学习模型

  • 我们以一个具体的比赛作为例子:贷款预测竞赛。这个比赛的主要目的是设置一个预处理数据通道,并且创建一个机器学习模型,最后可以完成部署,轻松实现贷款预测。
import os 
import json
import numpy as np
import pandas as pd
from sklearn.externals import joblib
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.ensemble import RandomForestClassifier

from sklearn.pipeline import make_pipeline

import warnings
warnings.filterwarnings("ignore")
  • 在文件夹中保存我们需要的数据,如下:
├── hello-world.py
├── model.py
├── sample.csv
├── test.csv
└── train.csv

之后,我们可以利用 pandas 进行数据读取,如下代码:

>>> import pandas as pd
>>> data = pd.read_csv('train.csv')
>>> list(data.columns)
['Loan_ID', 'Gender', 'Married', 'Dependents', 'Education', 'Self_Employed', 'ApplicantIncome', 'CoapplicantIncome', 'LoanAmount', 'Loan_Amount_Term', 'Credit_History', 'Property_Area', 'Loan_Status']
>>> data.shape
(614, 13)
  • 寻找数据中的缺失项(null / Nan):
for _ in data.columns:
    print("The number of null values in:{} == {}".format(_, data[_].isnull().sum()))

# output
The number of null values in:Loan_ID == 0
The number of null values in:Gender == 13
The number of null values in:Married == 3
The number of null values in:Dependents == 15
The number of null values in:Education == 0
The number of null values in:Self_Employed == 32
The number of null values in:ApplicantIncome == 0
The number of null values in:CoapplicantIncome == 0
The number of null values in:LoanAmount == 22
The number of null values in:Loan_Amount_Term == 14
The number of null values in:Credit_History == 50
The number of null values in:Property_Area == 0
The number of null values in:Loan_Status == 0

5. 保存机器学习模型:序列化和反序列化

6. 使用 Flask 创建一个 API

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值