本页亦即项目大厅页, 用于创建, 管理, 查看各种项目。项目管理栏分为三部分内容: a. 平台公开项目; b. 用户自己创建项目; c. 用户收藏的项目.
点击单个项目可进入项目详情页.
红色框中两个按钮,左侧表示fork
该项目,右侧表示收藏该项目.
红色框中两个按钮,左侧表示fork
该项目,点击右侧蓝色按钮置灰可取消收藏该项目.
PaddlePaddle
多种版本, 未来我们也将集成更多的开发框架.Python 2.7(默认)
, Python3.5
.若无需数据集,可由1、2操作后直接跳转5.
3、如果项目涉及到数据集, 可以考虑直接使用系统预置的数据集, 点击「添加数据集」
5、最后点击「创建」并在弹出框中选择「查看」进入项目详情页.
之后在项目详情页, 对项目进行编辑, 可以对数据集进行变更.
如果不熟悉操作, 则可以直接Fork
项目大厅的公开项目,可直接运行,加快学习速度.
2、填写项目名称和项目描述后点击「创建」,创建成功后此项目将存在于“我的项目”一栏.
如果对某个公开项目特别钟意,则可以直接收藏,方便以后的查看.
2、图标变为已收藏即收藏成功,收藏成功的项目将存在于“我的收藏”一栏.
1、点击项目大厅页面的「创建项目」.
2、选择Notebook
项目,完善项目信息,点击「创建」.
3、项目创建成功,点击「查看」.
4、至我的项目-项目详情页
Notebook
最新内容.Fork
记录: 项目被其他人Fork
的记录.5、点击右方「运行」进行项目环境选择.
CPU
环境)与高级版(GPU
环境)两种模式选择,默认为基础版,选择完毕点击确认.6、点击「确定」跳转到项目代码在线编辑Notebook
环境,Notebook
使用说明详见下一节《项目大厅-Notebook环境使用说明》,代码编辑完成后点击运行,保存之后可在我的项目-项目详情页查看最新版本内容,即如本文档页面概览所示。
VisualDL
是一个面向深度学习任务设计的可视化工具,包含了scalar
、参数分布、模型结构、图像可视化等功能. AI Studio
单机项目已经集成VisualDL
工具, Notebook
代码编写请参考文档如何在PaddlePaddle中使用VisualDL.
Loggers
来记录不同种类的数据. 注意我们的logdir = "./log"
, 即需要把log
目录放到/home/aistudio/log
.# create VisualDL logger and directory
logdir = "./log"
logwriter = LogWriter(logdir, sync_cycle=10)
# create 'train' run
with logwriter.mode("train") as writer:
# create 'loss' scalar tag to keep track of loss function
loss_scalar = writer.scalar("loss")
PaddlePaddle API
创建训练训练模型.def vgg16_bn_drop(input):
pass
VisualDL
来采集相关数据# add record for loss and accuracy to scalar
loss_scalar.add_record(step, loss)
Web
浏览器中输入URL
访问.URL
生成规则: 将项目地址中的notebooks
及之后部分替换为visualdl
.
# Notebooks项目访问URL
url_notebook = 'http://aistudio.baidu.com/user/30799/33852/notebooks/33852.ipynb?redirects=1'
# 替换后visualdl访问URL
url_visualdl = 'http://aistudio.baidu.com/user/30799/33852/visualdl'
Notebook
是用户运行Notebook
类型的项目后,在浏览器端所看到的交互式编程界面。
Notebook
由以下这几个部分构成:
Code Cell
Markdown Cell
以下对每个部分的操作分别说明.
文件 :对整体项目文件的操作.
- 保存选中文件: 保存当前Notebook文件(仅保存Notebook文件).
- 导出Notebook文件为ipynb: 将Notebook下载为ipynb文件在本地jupyter环境直接运行.
- 导出Notebook为py: 将Notebook下载为py文件并通过shell命令执行.
- 导入ipynb为Notebook: 将本地编写好的ipynb文件直接上传到Notebook环境中运行. 文件导入为覆盖式导入, 请慎重操作.
- 生成新版本: 为了更好的管理项目内容, 或进行公开项目等操作, 需要提前生成版本. 版本即为Notebook文件加上一定数量附件的集合. 一个项目下最多可以有5个版本. 当生成更多版本时, 将进行循环覆盖(最新版本覆盖掉最老版本).
- 加载历史版本: 用户可以使用历史版本来覆盖掉当前环境的全部内容, 实现版本回滚. 该操作为全量操作(即清空当前全部内容及文件, 然后将历史版本全部文件导入), 请慎重操作.
编辑 :对cell
单元的操作.
运行 :不同方式的cell
运行命令.
代码执行器 :对环境的操作。
中断:中断cell
运行.
重启环境:清空环境缓存变量和环境输出. 全部运行cell
前建议先执行此操作.
帮助 :使用帮助,包括快捷键、使用说明、常见问题和飞桨API
.
code cell
.code cell
.code cell
.Notebook
项目文件.Code Cell
是Notebook
的代码编写单元。用户在Code Cell
内编写代码(支持Python2
、Python3
)和shell
命令,代码/命令在云端执行,并返回结果到Code Cell
.
绿色代表块内容可编辑状态-编辑模式(比如输入代码),蓝色代表块可操作状态-命令模式(比如删除Cell
,必须回到蓝色),与linux
编辑器vi/vim
类似,编辑模式和命令模式之间可以用Esc
和Enter
来切换。
新建Cell
从快捷工具栏中新建Code Cell
hover
在Cell
间隙区域新建Code Cell
Cell
运行中状态:
运输后结果输出:
运输后结果输出结果过长时:
中止Cell
运行
如果发现代码并不尽如人意, 可以点击中断按钮, 打断所有Cell
代码的执行
Cell
Linux
命令
运行Linux
命令的方式是在Linux
命令前加一个!
,就可以在块里运行
示例1:安装第三方包
示例2: 查看当前环境中的Python
版本和Paddle
版本
Magic
关键字
Magic
关键字是可以运行特殊的命令。 Magic
命令的前面带有一个或两个百分号(%
或 %%
), 分别代表行Magic命令
和Cell Magic命令
。
行Magic命令
仅应用于编写Magic
命令时所在的行, 而Cell Magic命令
应用于整个Cell
.
Magic关键字 | 含义 |
---|---|
%timeit |
测试单行语句的执行时间 |
%%timeit |
测试整个块中代码的执行时间 |
%matplotlib inline |
显示matplotlib 包生成的图形 |
%run |
调用外部python 脚本 |
%pdb |
调试程序 |
%pwd |
查看当前工作目录 |
%ls |
查看目录文件列表 |
%reset |
清除全部变量 |
%who |
查看所有全局变量的名称,若给定类型参数,只返回该类型的变量列表 |
%whos |
显示所有的全局变量名称、类型、值/信息 |
%xmode Plain |
设置为当异常发生时只展示简单的异常信息 |
%xmode Verbose |
设置为当异常发生时展示详细的异常信息 |
%debug |
bug 调试,输入quit 退出调试 |
%bug |
调试,输入quit 退出调试 |
%env |
列出全部环境变量 |
示例1: 使用%%timeit
测算整个块的运行时间.
示例2: 块可集成Matplotlib
,从而进行绘图, 但需要注意绘图前需要输入%Matplotlib inline
并运行, 否则即使运行终端可用的绘图代码段,cell
也只会返回一个文件说明, 如下图所示
示例3: 查看所有支持的Magic
关键字.
Markdown Cell
是Notebook
中文本编辑单元,通过在Markdown Cell
中输入Markdown
格式的文本,可以编写文字教程说明.
绿色代表块内容可编辑状态-编辑模式(比如输入文字),蓝色代表块可操作状态-命令模式(预览md
展示样式),编辑模式和命令模式之间可以用Esc
和Enter
来切换。
Cell
从快捷工具栏中新建Markdown Cell
hover
在Cell
间隙区域新建Markdown Cell
Cell
支持插入公式、表格、图片、音乐、视频、网页等. 相关Markdown
用法可以参考Markdown官网.用户可以使用终端来进行一些操作, 与Notebook
主界面并行, 例如查询GPU
占用率或进行文本编辑.
注意:
Terminal
未开放sudo
权限.Terminal
下还未安装pip
, vim
.Emacs
.展示环境硬件和软件信息
按照树形结构展示/home/aistudio
路径下的文件夹和文件。可以在该目录下进行如下操作:
20M
). 鼠标悬浮在文件条目上, 会出现操作按钮, 包括下载文件、重命名文件、路径复制./home/aistudio/data
是非持久化目录,请不要将您的文件放到该目录下,重启后,文件将会丢失.在数据集栏中, 可以复制数据集文件的路径, 并置于代码中. 复制数据集路径成功则出现:
设置关闭后环境继续运行时间
您关闭Notebook
页面后,我们将继续为您保留一段时间的环境资源,代码将继续执行. 您可以通过设置配置希望在关闭网页后,环境继续运行的时间.
设置环境自动保存时间
设置是否显示Cell
序号
设置操作栏是否展示
模式 | 内容 | 快捷键(Windows) | 快捷键(Mac) |
---|---|---|---|
命令模式 (Esc 切换) |
运行块 | Shift-Enter |
Shift-Enter |
命令模式 | 在下方插入块 | B |
B |
命令模式 | 在上方插入块 | A |
A |
命令模式 | 删除块 | d-d |
d-d |
命令模式 | 切换到编辑模式 | Enter |
Enter |
编辑模式 (Enter 切换) |
运行块 | Shift-Enter |
Shift-Enter |
编辑模式 | 缩进 | Clrl-] |
`Command-] |
编辑模式 | 取消缩进 | Ctrl-[ |
Command-[ |
编辑模式 | 注释 | Ctrl-/ |
Command-/ |
编辑模式 | 函数内省 | Tab |
Tab |
用户可以点击菜单"文件"->“生成版本”, 来生成一个新版本. 每个版本最少会包含一个Notebook
文件, 而最大可以达到1GB
, 可包含至多1000
个附带文件.
用户正在编辑的内容会自动置为"草稿"版本, 如果用户对草稿版本的内容不满意, 可以重新加载历史上的版本以重新开始.
注意: 加载历史版本为全量操作, 即当前草稿版本的内容会被全部清空.
Notebook
项目在没有版本的时候无法公开, 此举是为了保证用户fork
您的项目时, 可以获得完整的Notebook
及其依赖文件, 这样其他用户才能顺利运行该项目.
脚本任务项目的任务执行由GPU集群作为支撑, 具有实时高速的并行计算和浮点计算能力, 有效解放深度学习训练中的计算压力, 提高处理效率。
用户可以先在Notebook项目中, 利用在线的Notebook
功能, 完成代码的编写与调试, 之后在脚本任务项目中运行, 从而提高模型训练速度.
选择脚本任务,可自行更换数据集。
在脚本任务项目详情页中, 用户可以浏览自己创建的项目内容, 编辑项目名称及数据集等信息, 查看集群历史任务信息等.
Notebook
最新内容. 初始化状态为脚本任务项目示例代码. 用户可以手动选择提交任务时对应的历史版本.代码编辑界面主要分为左侧: 文件管理和数据集, 和右侧: 代码编辑区和提交任务
文件管理
20MB
, 体积巨大的文件请通过数据集上传).tab
.用户可以进一步查看或编辑该文件的内容. (目前仅支持.py
文件和.txt
文件; 同时预览文件的体积上限为1MB)数据集管理
用户可以查看数据集文件, 并复制该文件的相对路径. 最后拼合模板内置绝对路径, 即可使用.
下方有详细介绍.
tab
即可对文件内容进行预览和编辑, 但当前仅支持.py
和.txt
格式的文件PaddlePaddle
基于集群的分布式训练任务与单机训练任务调用方法不同。基于pserver-trainer
架构的的分布式训练任务分为两种角色: parameter server(pserver)和trainer.
在Fluid
中, 用户只需配置单机训练所需要的网络配置, DistributeTranspiler
模块会自动地根据当前训练节点的角色将用户配置的单机网路配置改写成pserver
和trainer
需要运行的网络配置:
t = fluid.DistributeTranspiler()
t.transpile(
trainer_id = trainer_id,
pservers = pserver_endpoints,
trainers = trainers)
if PADDLE_TRAINING_ROLE == "TRAINER":
# 获取pserver程序并执行它
trainer_prog = t.get_trainer_program()
...
elif PADDLE_TRAINER_ROLE == "PSERVER":
# 获取trainer程序并执行它
pserver_prog = t.get_pserver_program(current_endpoint)
...
PADDLE_TRAINERS=1
(PADDLE_TRAINERS
是分布式训练任务中 trainer
节点的数量)PaddlePaddle
代码请放到if PADDLE_TRAINING_ROLE == "TRAINER":
分支下执行, 例如数据集解压任务更多集群使用说明请参考PaddlePaddle官方文档
./datasets
# 数据集文件会被自动拷贝到./datasets目录下
CLUSTER_DATASET_DIR = '/root/paddlejob/workspace/train_data/datasets/'
在页面左侧数据集中点击复制数据集文件路径, 得到文件的相对路径, 例如点击后复制到剪切板的路径为data65/train-labels-idx1-ubyte.gz
.
# 数据集文件相对路径
file_path = 'data65/train-labels-idx1-ubyte.gz'
真正使用的时候需要将两者拼合 train_datasets = datasets_prefix + file_path
./output
# 需要下载的文件可以输出到'/root/paddlejob/workspace/output'目录
CLUSTER_OUTPUT_DIR = '/root/paddlejob/workspace/output'
点击【运行项目】后进入到任务编辑页面.
历史任务页面如下所示.
任务操作:
xxx(任务编号)_output.tar.gz
.xxx(任务编号)_log.tar.gz
.脚本任务项目空间安装包列表
Package | Version |
---|---|
attrs | 18.2.0 |
backports-abc | 0.5 |
backports.functools-lru-cache | 1.5 |
backports.shutil-get-terminal-size | 1.0.0 |
bleach | 3.0.2 |
certifi | 2018.11.29 |
chardet | 3.0.4 |
Click | 7.0 |
configparser | 3.5.0 |
cycler | 0.10.0 |
Cython | 0.29 |
decorator | 4.3.0 |
entrypoints | 0.2.3 |
enum | 0.4.7 |
enum34 | 1.1.6 |
Flask | 1.0.2 |
funcsigs | 1.0.2 |
functools32 | 3.2.3.post2 |
future | 0.17.1 |
futures | 3.2.0 |
graphviz | 0.10.1 |
gym | 0.12.1 |
h5py | 2.8.0 |
idna | 2.8 |
ipaddress | 1.0.22 |
ipykernel | 4.10.0 |
ipython | 5.8.0 |
ipython-genutils | 0.2.0 |
itsdangerous | 1.1.0 |
Jinja2 | 2.10 |
jsonschema | 3.0.0a3 |
jupyter-client | 5.2.4 |
jupyter-core | 4.4.0 |
kiwisolver | 1.0.1 |
MarkupSafe | 1.1.0 |
matplotlib | 2.2.3 |
mistune | 0.8.4 |
nbconvert | 5.3.1 |
nbformat | 4.4.0 |
nltk | 3.4 |
notebook | 5.7.2 |
numpy | 1.15.4 |
opencv-python | 3.4.4.19 |
paddlehub | 1.0.0 |
paddlepaddle | 1.5.0 |
pandas | 0.23.4 |
pandocfilters | 1.4.2 |
parl | 1.1 |
pathlib2 | 2.3.3 |
pexpect | 4.6.0 |
pickleshare | 0.7.5 |
Pillow | 5.3.0 |
pip | 18.1 |
prettytable | 0.7.2 |
prometheus-client | 0.5.0 |
prompt-toolkit | 1.0.15 |
protobuf | 3.1.0 |
ptyprocess | 0.6.0 |
py-cpuinfo | 5.0.0 |
pyarrow | 0.13.0 |
pyglet | 1.3.2 |
Pygments | 2.3.0 |
pyparsing | 2.3.0 |
pyrsistent | 0.14.7 |
python-dateutil | 2.7.5 |
pytz | 2018.7 |
PyYAML | 5.1 |
pyzmq | 17.1.2 |
rarfile | 3.0 |
recordio | 0.1.5 |
requests | 2.22.0 |
scandir | 1.9.0 |
scikit-learn | 0.20.0 |
scipy | 1.1.0 |
Send2Trash | 1.5.0 |
setuptools | 40.6.2 |
simplegeneric | 0.8.1 |
singledispatch | 3.4.0.3 |
six | 1.12.0 |
sklearn | 0.0 |
subprocess32 | 3.5.3 |
termcolor | 1.1.0 |
terminado | 0.8.1 |
testpath | 0.4.2 |
tornado | 5.1.1 |
traitlets | 4.3.2 |
urllib3 | 1.25.3 |
visualdl | 1.3.0 |
wcwidth | 0.1.7 |
webencodings | 0.5.1 |
Werkzeug | 0.14.1 |
wheel | 0.32.3 |
Package | Version |
---|---|
backcall | 0.1.0 |
bleach | 3.0.2 |
certifi | 2018.8.24 |
chardet | 3.0.4 |
Click | 7.0 |
cycler | 0.10.0 |
Cython | 0.29 |
decorator | 4.3.0 |
entrypoints | 0.2.3 |
Flask | 1.0.2 |
funcsigs | 1.0.2 |
future | 0.17.1 |
graphviz | 0.10.1 |
gym | 0.12.1 |
h5py | 2.8.0 |
idna | 2.8 |
ipykernel | 5.1.0 |
ipython | 7.0.1 |
ipython-genutils | 0.2.0 |
itsdangerous | 1.1.0 |
jedi | 0.12.1 |
Jinja2 | 2.10 |
jsonschema | 2.6.0 |
jupyter-client | 5.2.4 |
jupyter-core | 4.4.0 |
kiwisolver | 1.0.1 |
MarkupSafe | 1.0 |
matplotlib | 2.2.3 |
mistune | 0.8.3 |
nbconvert | 5.3.1 |
nbformat | 4.4.0 |
nltk | 3.4 |
notebook | 5.7.0 |
numpy | 1.15.4 |
opencv-python | 3.4.4.19 |
paddlehub | 1.0.0 |
paddlepaddle | 1.5.0 |
pandas | 0.23.4 |
pandocfilters | 1.4.2 |
parl | 1.1 |
parso | 0.3.1 |
pexpect | 4.6.0 |
pickleshare | 0.7.5 |
Pillow | 5.3.0 |
pip | 18.0 |
prettytable | 0.7.2 |
prometheus-client | 0.5.0 |
prompt-toolkit | 2.0.7 |
protobuf | 3.1.0 |
ptyprocess | 0.6.0 |
py-cpuinfo | 5.0.0 |
pyarrow | 0.13.0 |
pyglet | 1.3.2 |
Pygments | 2.3.0 |
pyparsing | 2.3.0 |
python-dateutil | 2.7.5 |
pytz | 2018.7 |
PyYAML | 5.1 |
pyzmq | 17.1.2 |
rarfile | 3.0 |
recordio | 0.1.7 |
requests | 2.22.0 |
scikit-learn | 0.20.0 |
scipy | 1.1.0 |
Send2Trash | 1.5.0 |
setuptools | 40.4.3 |
simplegeneric | 0.8.1 |
singledispatch | 3.4.0.3 |
six | 1.12.0 |
sklearn | 0.0 |
termcolor | 1.1.0 |
terminado | 0.8.1 |
testpath | 0.3.1 |
tornado | 5.1.1 |
traitlets | 4.3.2 |
urllib3 | 1.25.3 |
visualdl | 1.3.0 |
wcwidth | 0.1.7 |
webencodings | 0.5.1 |
Werkzeug | 0.14.1 |
wheel | 0.32.0 |
如在使用中遇到问题, 可以邮件至 [email protected]
图形化任务旨在使用图形拖拽的方式来设计并训练模型, 并可进行快速部署. 同时还可以生成对应的源码. 最终达成"先实现, 再学习"的目的, 有效提高开发者的效率.
图形化任务使用GPU
集群作为支撑, 具有实时高速的并行计算和浮点计算能力.
该功能目前属于Beta
版本. 仅对受邀用户开放试用.
点击创建项目, 然后在"配置资源"中选择"图形化任务", 然后填写必要信息后, 点击"创建"
创建成功后, 可以进入项目的预览页面. 预览页面除了项目基本信息外, 可以切换设计器视图和代码视图.
设计器视图预览:
代码视图预览:
进入编辑项目的界面:
左侧为工具箱, 可以从工具箱向中央画布拖入各种组件:
当前工具箱内为算法, 数据, 训练, 测试4类:
算法:
数据:
训练:
测试:
当前尚不支持自定义控件. 近期会予以支持.
最终构建成完成的网络:
构建完成后可以启动训练:
此时左侧工具箱已经锁定, 下方开始输出日志:
点击"任务列表", 也可以查看当前任务的状态
正式部署: 当运行完成后点击上方"部署"按钮, 即可启动部署流程:
部署需要选定训练好的模型
部署过程需要一定时间, 之后会显示为部署完成
部署后可以看到沙盒. 一个项目最多可配置5个沙盒用于测试
点击测试可以使用自己的数据测试在线接口:
测试后, 如果效果满意, 可以部署为正式API
请求
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
text | Array | 房价预测的13维归一化后的数据 |
示例:
{
"text": [-0.41733927, -0.48772237, -0.593381, -0.27259856, -0.7402622, 0.19427446, 0.36716643, 0.5571599, -0.8678825, -0.9873295, -0.30309415, 0.44105193, -0.49243936]
}
返回
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
predicted_result | Array | 模型的输出 | |
predicted_label | float | 房价的预测结果 |
示例:
[
{
"predicted_result": [
[
16.114334106445312
]
]
},
{
"predicted_label": 16.114334106445312
}
]
请求
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
text | Array | 莺尾花的4维归一化后的数据 |
示例:
{
"text": [1.0147785, -1.3129628, -1.3348082, -0.8980088]
}
返回
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
predicted_result | Array | 模型的输出 | |
predicted_label | integer | 预测结果,类别标示,对应类别请参考训练数据集的train.txt文件 |
示例:
[
{
"predicted_result": [
[
0.178230881690979,
0.1754814237356186,
0.646287739276886
]
]
},
{
"predicted_label": 2
}
]
请求
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
image | String | 数据集的任一张图片的base64编码后的字符串 |
示例:
{
"image":"base64 图像转换base64参考https://www.base64-image.de/"
}
返回
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
predicted_result | Array | 模型的输出 | |
predicted_label | integer | 预测结果,类别标示,对应类别请参考训练数据集的train.txt文件 |
示例:
[
{
"predicted_result": [
[
4.15152685017504e-17,
6.219317838507266e-10,
1
]
]
},
{
"predicted_label": 2
}
]
请求
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
image | String | PASCAL VOC数据集(或任意图片)的任一张图片的base64编码后的字符串 |
示例:
{
"image":"base64 图像转换base64参考https://www.base64-image.de/"
}
返回
参数 | 类型 | 说明 | 其他 |
---|---|---|---|
category_id | Integer | PASCAL VOC数据类别标示,对应数据集的label_list文件每个类别的次序 | |
p1 | Array | box的左上坐标 | |
p2 | Array | box的左下坐标 | |
p3 | Array | box的右下坐标 | |
p4 | Array | box的右上坐标 |
示例:
[
{
"p2": [
211.43447756767273,
213.80889415740967
],
"p3": [
292.56797432899475,
213.80889415740967
],
"category_id": 15,
"p1": [
211.43447756767273,
0
],
"p4": [
292.56797432899475,
0
]
}
]
波士顿房价
类型: txt
体积: 40KB
简介: http://www.paddlepaddle.org/documentation/docs/zh/1.2/beginners_guide/quick_start/fit_a_line/README.cn.html
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/housing.txt
鸢尾花数据集
类型: csv
体积: 4KB
简介: 约150条数据,每条样本4个属性,共3个类别
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/Iris_DataSet.csv
MNIST数据集
类型: zip
体积: 30MB
简介: 共包含70000张灰度图
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/mnist.zip
(MD5: d569e1965b8e90e066681e1dbe864487)
猫狗数据集
类型: zip
体积: 550MB
简介: 包含25000张RGB图片,其中cat12500张,dog12500张
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/catVsdog.zip
(MD5: 384bbb42dfc5faf63beaa0cade3d8cff)
Ox-Flowers17
类型: zip
体积: 58MB
简介: 包含17种不同类型的花,每类包含80张RGB图
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/flowers17.zip
(MD5: bd2a8acfe07529b89649e7ca5a866242)
CIFAR10数据集
类型: zip
体积: 51.31MB
简介: http://www.paddlepaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/basics/image_classification/README.cn.html
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/cifar10.zip (MD5: 2cf4e2caa2b7759572eef14f47cccf61))
vegetables
类型: zip
体积: 9.5MB
简介: 包含3类蔬菜(黄瓜、生菜、莲藕),每类包含100张RGB图片
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/vegetables.zip (MD5: 90835e76aa00b6c6bf1ed3b8cba96df5)
pascalvoc
类型: zip
体积: 2.6GB
简介: 包含20类,共约21503张RGB图像及标注信息
下载地址: https://ai-studio-static-online.bj.bcebos.com/preset_dataset/pascalvoc.zip (MD5: 3aaa5ad581114438ab6ba4dbf0720504)
在线部署与预测为开发者提供训练模型向应用化API
转换的功能. 开发者在AI Studio
平台通过NoteBook
项目完成模型训练后, 在Notebook
详情页通过创建一个在线服务, 应用模型生成在线API
, 使用该API
可以直接检验模型效果或实际应用到开发者的私有项目中。目前, 该功能暂时仅对Notebook项目开放。
import paddle
import paddle.fluid as fluid
import numpy
import math
import sys
from __future__ import print_function
BATCH_SIZE = 20
train_reader = paddle.batch(
paddle.reader.shuffle(
paddle.dataset.uci_housing.train(), buf_size=500),
batch_size=BATCH_SIZE)
test_reader = paddle.batch(
paddle.reader.shuffle(
paddle.dataset.uci_housing.test(), buf_size=500),
batch_size=BATCH_SIZE)
params_dirname = "model2"
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
main_program = fluid.default_main_program()
startup_program = fluid.default_startup_program()
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_loss = fluid.layers.mean(cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_loss)
#clone a test_program
test_program = main_program.clone(for_test=True)
use_cuda = False
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
exe = fluid.Executor(place)
num_epochs = 100
# For training test cost
def train_test(executor, program, reader, feeder, fetch_list):
accumulated = 1 * [0]
count = 0
for data_test in reader():
outs = executor.run(program=program,
feed=feeder.feed(data_test),
fetch_list=fetch_list)
accumulated = [x_c[0] + x_c[1][0] for x_c in zip(accumulated, outs)]
count += 1
return [x_d / count for x_d in accumulated]
params_dirname = "fit_a_line.inference.model"
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
naive_exe = fluid.Executor(place)
naive_exe.run(startup_program)
step = 0
exe_test = fluid.Executor(place)
# main train loop.
for pass_id in range(num_epochs):
for data_train in train_reader():
avg_loss_value, = exe.run(main_program,
feed=feeder.feed(data_train),
fetch_list=[avg_loss])
if step % 10 == 0: # record a train cost every 10 batches
print (step, avg_loss_value[0])
if step % 100 == 0: # record a test cost every 100 batches
test_metics = train_test(executor=exe_test,
program=test_program,
reader=test_reader,
fetch_list=[avg_loss.name],
feeder=feeder)
print (step, test_metics[0])
# If the accuracy is good enough, we can stop the training.
if test_metics[0] < 10.0:
break
step += 1
if math.isnan(float(avg_loss_value[0])):
sys.exit("got NaN loss, training failed.")
if params_dirname is not None:
# We can save the trained parameters for the inferences later
fluid.io.save_inference_model(params_dirname, ['x'],
[y_predict], exe)
!wget
在Notebook
中传输模型文件到环境目录。以房价预测的线性回归模型为例, 通过!wget https://ai.baidu.com/file/4E1D1FCC670E4A5E8441634201658107 -O fit_a_line.inference.model
传输文件, 解压后直接被在线服务使用.完成模型训练后, 在Notebook
项目页面点击【创建预测服务】
paddle.fluid.io.save_inference_model
中参数main_program
配置的程序, 在房价预测的示例中,我们使用默认参数调用save_inference_model
, 因此将__model__
文件设置为主程序.填写模型的输入输出参数. 以房价预测的线性回归模型为例(参数参考), 添加参数如下图所示.
参数转换器帮助用户转化合法输入并完成数据预处理.
Python2.7
)(推荐).输入参数转换器方法
def reader_infer(data_args):
"""
reader_infer 输入参数转换器方法
:param data_args: 接口传入的数据,以k-v形式
:return [[]], feeder
"""
#构造内容
pass
输出参数转换器方法
def output(results, data_args):
"""
output 输出参数转换器方法
:param results 模型预测结果
:param data_args: 接口传入的数据,以k-v形式
:return array 需要能被json_encode的数据格式
"""
#构造内容
pass
转换器代码示例, 以房价预测为例.
输入参数转换器:
import os
import sys
sys.path.append("..")
from PIL import Image
import numpy as np
import paddle.fluid as fluid
from home.utility import base64_to_image
def reader_infer(data_args):
"""
reader_infer 输入参数转换器方法
:param data_args: 接口传入的数据,以k-v形式
:return [[]], feeder
"""
def reader():
"""
reader
:return:
"""
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
# y = fluid.layers.data(name='y', shape=[1], dtype='float32')
feeder = fluid.DataFeeder(place=fluid.CPUPlace(), feed_list=[x])
CRIM = float(data_args["CRIM"])
ZN = float(data_args["ZN"])
INDUS = float(data_args["INDUS"])
CHAS = float(data_args["CHAS"])
NOX = float(data_args["NOX"])
RM = float(data_args["RM"])
AGE = float(data_args["AGE"])
DIS = float(data_args["DIS"])
RAD = float(data_args["RAD"])
TAX = float(data_args["TAX"])
PTRATIO = float(data_args["PTRATIO"])
B = float(data_args["B"])
LSTAT = float(data_args["LSTAT"])
return [[[CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO, B, LSTAT]]], feeder
return reader
输出参数转换器:
def output(results, data_args):
"""
output 输出参数转换器方法
:param results 模型预测结果
:param data_args: 接口传入的数据,以k-v形式
:return array 需要能被json_encode的数据格式
"""
lines = []
for dt in results:
y = dt.tolist()
lines.append({"predict": y})
return lines
方式二: 默认参数, 不设置转换器.
用户的API
参数直接传递给模型.
用户可以同时部署至多五个沙盒服务, 用来对比模型优化结果.
录入名称点击【生成沙盒】或者点击【暂存】将沙盒保存到草稿箱.
对沙盒列表中的沙盒服务进行测试,验证是否配置正确。
点击【正式部署】部署线上API
.
依据API key
、服务地址和用户自定义参数, 实现对服务的调用.
HTTP
请求URL
: [服务地址] [?] [apiKey=xxx]HTTP
请求方法: POST
HTTP Body
: 用户自定义参数以房价预测项目为例.
CURL
curl -H "Content-Type: application/json" -X POST -d '{"CRIM":0.01887747, "ZN":-0.11363636, "INDUS":0.25525005, "CHAS":-0.06916996, "NOX":0.29898136, "RM": -0.04476612, "AGE": 0.14340987, "DIS":-0.14797285, "RAD":0.62828665, "TAX":0.49191383, "PTRATIO":0.18558153, "B":0.05473289, "LSTAT":0.16851371}' "https://aistudio.baidu.com/serving/online/xxx?apiKey=xxxxxxxxxx"
Python
import json
import traceback
import urllib
import urllib2
formdata = {
"CRIM":0.01887747,
"ZN":-0.11363636,
"INDUS":0.25525005,
"CHAS":-0.06916996,
"NOX":0.29898136,
"RM": -0.04476612,
"AGE": 0.14340987,
"DIS":-0.14797285,
"RAD":0.62828665,
"TAX":0.49191383,
"PTRATIO":0.18558153,
"B":0.05473289,
"LSTAT":0.16851371
}
header = {"Content-Type": "application/json; charset=utf-8"}
url = "https://aistudio.baidu.com/serving/online/xxx?apiKey=a280cf48-6d0c-4baf-bd39xxxxxxcxxxxx"
data = json.dumps(formdata)
try:
request = urllib2.Request(url, data, header)
response = urllib2.urlopen(request)
response_str = response.read()
response.close()
print(response_str)
except urllib2.HTTPError as e:
print("The server couldn't fulfill the request")
print(e.code)
print(e.read())
except urllib2.URLError as e:
print("Failed to reach the server")
print(e.reason)
except:
traceback.print_exc()
https://ai.baidu.com/ai-doc/AISTUDIO/Dk3e2vxg9