相关文章

【一】-环境配置+python入门教学

【二】-Parl基础命令

【三】-Notebook、&pdb、ipdb 调试

【四】-强化学习入门简介

【五】-Sarsa&Qlearing详细讲解

【六】-DQN

【七】-Policy Gradient

【八】-DDPG

【九】-四轴飞行器仿真

飞桨PARL_2.0&1.8.5(遇到bug调试修正)


一、AI Studio 项目详解【VisualDL工具】

二、AI Studio 项目详解【环境使用说明、脚本任务】

三、AI Studio 项目详解【分布式训练-单机多机】

四、AI Studio 项目详解【图形化任务】

五、AI Studio 项目详解【在线部署及预测】


【五】AI Studio 项目详解【在线部署及预测---生成沙盒】

在线部署与预测为开发者提供训练模型向应用化API转换的功能. 开发者在AI Studio平台通过NoteBook项目完成模型训练后, 在Notebook详情页通过创建一个在线服务, 应用模型生成在线API, 使用该API可以直接检验模型效果或实际应用到开发者的私有项目中.目前, 该功能暂时仅对Notebook项目开放。

通过训练任务生成模型文件

  • 在训练任务过程中, 通过调用paddle.fluid.io.save_inference_model`实现模型的保存,保存后的目录需要可以被在线服务使用. 我们以房价预测的线性回归任务为例, 具体代码如下
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传输文件, 解压后直接被在线服务使用.

在进行解压unzip

创建一个在线服务

完成模型训练后, 在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参数直接传递给模型.

第四步 沙盒部署

用户可以同时部署至多五个沙盒服务, 用来对比模型优化结果.

录入名称点击【生成沙盒】或者点击【暂存】将沙盒保存到草稿箱.

测试沙盒服务

对沙盒列表中的沙盒服务进行测试,验证是否配置正确。

第一步 点击【测试】打开测试页面

第二步 填写json格式请求参数

第三步 点击【发送】检验返回结果

部署在线服务

点击【正式部署】部署线上API.

  • 一个项目可以创建至多五个沙盒服务, 并选择其中一个沙盒服务部署为线上服务.
  • 沙盒服务如果连续超过24小时无调用将自动调整为暂停状态.
  • 线上服务如果连续超过14天无调用将自动调整为暂停状态.

调用在线服务

依据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()

【五】AI Studio 项目详解【VisualDL工具、环境使用说明、脚本任务、图形化任务、(五)在线部署及预测】PARL的更多相关文章

  1. Android Studio 插件开发详解二:工具类

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...

  2. Mac下Intellij IDea发布Java Web项目详解五 开始测试

    测试前准备工作目录 Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intell ...

  3. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...

  4. Android Studio 插件开发详解一:入门练手

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 一:概述 相信大家在使用Android S ...

  5. Android Studio 插件开发详解四:填坑

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 在前面我介绍了插件开发的基本流程 [And ...

  6. eclipse里面构建maven项目详解(转载)

    本文来源于:http://my.oschina.net/u/1540325/blog/548530 eclipse里面构建maven项目详解 1       环境安装及分配 Maven是基于项目对象模 ...

  7. Redis 配置文件 redis.conf 项目详解

    Redis.conf 配置文件详解 # [Redis](http://yijiebuyi.com/category/redis.html) 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, ...

  8. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  9. Mac下Intellij IDea发布Web项目详解一

    Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intellij IDea发布J ...

  10. JAVA Eclipse使用Maven构建web项目详解(SSM框架)

    tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...

随机推荐

  1. Django rest_framework用户认证和权限

    完整的代码 https://gitee.com/mom925/django-system 使用jwt实现用户认证 pip install djangorestframework-simplejwt 重 ...

  2. 麻省理工公开课:微积分,中文字幕视频+PDF

    数学是机器学习的语言,统计是构建机器学习的基础,线性代数为机器学习提供了矩阵这一强大工具,但是要充分理解神经网络以及深度学习如何运作的,还需要学好微积分. 大家应该多少对微积分有些基础,但是很难将其与 ...

  3. 【C++第三方库】Windows下编译和使用 WebSocket++/WebSocketpp

    应用场景: 使用C++开发一个支持websocket协议的服务进程,可与HTML5(浏览器js文件)通信.来实现替换基于firebreath框架的跨浏览器插件开发. 当前,讲述websocketpp开 ...

  4. 数据结构——AVL树

    AVL树是一种特殊的二叉查找树,其特征在于:对所有节点来说,其左子树和右子树间的高度差小于等于1.本文简要总结下AVL树的几种基本操作. 节点结构体定义 typedef struct Node_s { ...

  5. 厄拉多塞筛法的 Python 实现以及复杂度计算

    想要得到一个不大于N的数所有素数,可以先找到不超过根号N的所有素数,设2 = p1 < p2 < ......<pk ≤√N,然后在2,3,4......N里面进行下面的操作: 留下 ...

  6. redis管道技术pipeline一 ——api

    import java.io.UnsupportedEncodingException; import java.util.Set; import org.springframework.beans. ...

  7. ==和equals的区别和联系,StringBuffer和StringBuilder,clone方法

    ==和equals的区别和联系? ( 1)对于==,比较的是值是否相等 如果作用于基本数据类型的变量,则直接比较其存储的 "值"是否相等: 如果作用于引用类型的变量,则比较的是所指 ...

  8. 阿里云张建锋:核心云产品全面 Serverless 化

    11月3日,2022 杭州 · 云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型计算体系正在形成,软件研发范式正在发生新的变革,Serverless 是其中最重要的趋势之一,阿里云将坚定推进核心 ...

  9. 2、springboot创建多模块工程

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  10. fetch与axios