本文由 「AI前线」原创,原文连接: Keras做者力推开源框架Lore:15分钟搞定深度学习模型从配置到部署
做者|Montana Low
译者|Debra
编辑|Emily
AI 前线导读:今天,Keras 的做者 Francois Chollet 转推了一篇文章,教你们基于开源框架 Lore 在 15 分钟内创建深度学习模型,用 Python 配置、构建、部署和维护深度学习模型。真的能在这么短的时间内构建深度学习模型吗?咱们来一探究竟。python
随着 Instacart 的发展,咱们学到了一些知识,可是获取知识的方法却并不简单。咱们的开源框架 Lore ,可让工程师距离机器学习更进一步,并且机器学习研究人员也能够操做。git
开源框架 Lore 连接:github
机器学习通常给人的印象是这样的:算法
呃,这张纸并无告诉我它的工做方式......数据库
常见问题编程
为了解决这些问题,咱们正在对 Lore 中的机器学习进行标准化。在 Instacart,咱们的三个团队正在使用 Lore 进行机器学习开发,目前已经能够运行十几种 Lore 模型。json
TLDR缓存
如下是在没有上下文的状况下进行快速预测的演示,你能够从 github 复制my_app
。若是想了解全程,请跳至大纲。bash
$ pip3 install lore
$ git clone https://github.com/montanalow/my_app.git
$ cd my_app
$ lore install # caching all dependencies locally takes a few minutes the first time
$ lore server &
$ curl "http://localhost:5000/product_popularity.Keras/predict.json?product_name=Banana&department=produce"
复制代码
功能规格
在 15 分钟内将本身的深度学习项目投入生产,你就能充分体会到 Lore 的优点在哪里了。若是你想在编写代码以前查看一下功能规格,请参阅如下简要概述:
15 分钟构建深度学习框架大纲
只要懂得基本的 Python 知识,就能够开始这个任务了。若是你的机器不能进行学习,就能够用剩下的时间好好探索机器学习的复杂性。
建立一个新的应用程序
Lore 独立管理每一个项目的依赖关系,以免与你的系统 Python 或其余项目发生冲突。将 Lore 以标准的 pip 软件包安装:
# On Linux
$ pip install lore
# On OS X use homebrew python 2 or 3
$ brew install python3 && pip3 install lore
复制代码
当你没法建立相同的环境时,就很难重复别人的工做。 Lore 保留你的操做系统 Python 的工做方式,以防止依赖性错误和项目之间发生冲突。每一个 Lore 应用程序都有它本身的目录,有本身的 Python 安装,以及把各自须要的依赖关系锁定到 runtime.txt 和 requirements.txt 中的特定版本。这使得分享 Lore 应用程序的效率更高,并使咱们的机器学习项目向避免重复性方面迈进了一步。
安装 Lore 后,你就能够建立一个新的深度学习项目应用程序。Lore 默认是模块化的,所以咱们须要指定keras
来安装此项目的深度学习依赖项。
$ lore init my_app --python-version=3.6.4 --keras
复制代码
设计模型
咱们将演示如何创建一个模型,仅根据名称和所属的分类预测商品在 Instacart 网站上受欢迎的程度。世界各地的制造商都会测试各类类产品的名称,零售商则经过优化产品以最大限度地提升产品的吸引力。咱们这个简单的人工智能将提供相同的服务。
机器学习最难的挑战之一就是获取优质数据。幸运的是,Instacart 已经为此任务公开了 300 万份匿名货物订单,并从新进行调整。而后,咱们能够将问题建立成一个监督式学习回归模型,该模型根据 2 个特征预测年销售量:产品名称和分类。
请注意,咱们将创建的模型仅用于演示,并没有没有实际用途。咱们给好奇的读者提供了一个很好的模型,仅供练习。
生成框架
$ cd my_app
$ lore generate scaffold product_popularity --keras --regression --holdout
复制代码
每一个 Lore 模型包括一个用于加载和编码数据的管道,以及一个部署特定机器学习算法的估算器。这个模型有趣的地方在于类别生成实现过程的细节。
整个过程从左侧的原始数据开始,并将其编码为右侧所需的形式。而后使用编码数据、验证测试提早终止数据对估算器进行训练,并在测试集上进行评估。全部内容均可以在模型存储区进行序列化,而后再次加载数据循环进行训练。
模型工做原理示意图
管道部署
不多有原始数据彻底适用于机器学习算法。一般咱们从数据库得到原始数据或下载一个 CSV 文件,进行调整以适应算法,而后将其分为为训练集和测试集。 lore.pipelines
中的基类将此逻辑按照标准化流程执行。
lore.pipelines.holdout.Base
将数据分红训练、验证和测试集,并对咱们的机器学习算法进行编码。咱们的子类将负责定义 3 种方法:get_data
,get_encoders
和get_output_encoder
。
Instacart 公布的数据分布在多个 csv 文件中。
管道的get_data
将下载原始 Instacart 数据,并使用 pandas 将其加入到具备(product_name,department)
和对应的销售总量(sales)
的DataFrame
中:
这是get_data
的部署:
接下来,咱们须要为每列指定一个编码器。计算机科学家可能会认为编码器是有效机器学习的一种类型注释形式。有些产品的名字挺可笑,因此咱们会选取它们的前 15 个单词。
这就是整个工做流程。咱们的初始估算器将做为 lore.estimators.keras.Regression 的一个简单子类,它构建了一个具备合理默认值的经典深度学习框架。
# my_app/estimators/product_popularity.py
import lore.estimators.keras
class Keras(lore.estimators.keras.Regression):
pass
复制代码
最后,咱们的模型经过将它们返回估算器,并从构建的框架中提取数据,来实现深度学习架构的高级属性。
测试代码
生成框架时,该模型会自动进行冒烟测试。第一次运行测试须要多花一些时间来下载 200MB 的测试数据集。最好先处理一下./tests/data
中的文件缓存,将其放入 repo 中,以消除网络依赖,加速测试。
$ lore test tests.unit.test_product_popularity
复制代码
训练模型
训练模型的数据将缓存在./data
中,并将工件保存在./models
中。
$ lore fit my_app.models.product_popularity.Keras --test --score
复制代码
按照第二个终端中的日志查看 Lore 的耗时状况。
$ tail -f logs/development.log
复制代码
试着添加更多的隐藏图层,看看是否对模型score
有帮助。你能够编辑模型文件,或直接经过命令行调用属性以适应 --hidden_layers = 5
。缓存数据集可能须要大约 30 秒。
检查模型的功能
你能够在你的 Lore 环境中运行 jupyter 笔记本。Lore 将安装一个自定义 jupyter 内核,并使用你建立的应用程序的虚拟 env,用于lore notebook
和lore console
。
浏览notebooks / product_popularity / features.ipynb
并“所有运行”以查看模型最后一次适配的可视化效果。
“生产”部门被编码为“20”
能够看到,针对特定功能时,该模型的预测值和测试集(金色)吻合程度很高。在这个案例中,有 21 个种类都达到了很好的重叠效果,除了“produce”这个类别,由于模型没有彻底计算其有多少异常值。
你还能够看到由/ product_popularity / architecture.ipynb
脚本生成的深度学习框架。
15 个标记名称经过左侧的 LSTM 运行,种类名称放入右侧的嵌入,而后二者均经过隐藏层。
为模型提供服务
Lore 应用程序能够做为一个本地模型 HTTP API。默认状况下,模型将经过 HTTP GET 端点公开他们的“预测”方法。
个人结果代表,将“有机”添加到“香蕉”,"农产品"的销量将提升两倍。 “绿色香蕉”的销量预计会比“布朗香蕉”差。
投入生产
Lore 能够经过全部支持 Heroku buildpack 的基础架构进行部署。 部署容器的runtime.txt
和requirements.txt
中的 Buildpacks 安装有具体规范。若是你想在云端横向扩展,能够按照 heroku 的入门指南进行操做。
你能够查看每次在
./models/my_app.models.product_popularity/Keras/
中进行 lore fit 命令的结果。该目录和./data/
默认位于.gitignore
中,由于你的代码能够随时重建它们。一个简单的部署策略,是插入所要发布的模型版本。
$ git init .
$ git add .
$ git add -f models/my_app.models.product_popularity/Keras/1 # or your preferred fitting number to deploy
$ git commit -m "My first lore app!"
复制代码
Heroku 能够轻松发布应用程序。这是他们的入门指南。
devcenter.heroku.com/articles/ge…
这是 TLDR:
$ heroku login
$ heroku create
$ heroku config:set LORE_PROJECT=my_app
$ heroku config:set LORE_ENV=production
$ git push heroku master
$ heroku open
$ curl “`heroku info -s | grep web_url | cut -d= -f2`product_popularity.Keras/predict.json?product_name=Banana&department=produce”
复制代码
下一步
咱们认为这个框架的 0.5 版本为社区一块儿构建 1.0 版本奠基了坚实的基础。发布修补程序版本能够避免重大改动,但次要版本可能会根据社区需求更改功能,弃用旧版本并进行更新升级。
如下是咱们计划在 1.0 版本以前添加的一些功能:
感谢 Jeremy Stanley、Emmanuel Turlay 和 Shrikar Archak 对代码的贡献。
原文连接:
tech.instacart.com/how-to-buil…
更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。