简 介: ※利用Python编写的aisi辅助程序,可以在一定程度上缓解简单性与灵活性之间的矛盾。这以个人搭建网络的习惯进行固定,在平时以更小的代码量,更灵活的方式构建深度学习程序。提高程序开发效率。

关键词AI studioPaddlePaddleasis

#mermaid-svg-JILWSnb60V5SGqvZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-JILWSnb60V5SGqvZ .label text{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .node rect,#mermaid-svg-JILWSnb60V5SGqvZ .node circle,#mermaid-svg-JILWSnb60V5SGqvZ .node ellipse,#mermaid-svg-JILWSnb60V5SGqvZ .node polygon,#mermaid-svg-JILWSnb60V5SGqvZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JILWSnb60V5SGqvZ .node .label{text-align:center;fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .node.clickable{cursor:pointer}#mermaid-svg-JILWSnb60V5SGqvZ .arrowheadPath{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-JILWSnb60V5SGqvZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-JILWSnb60V5SGqvZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-JILWSnb60V5SGqvZ .edgeLabel rect{opacity:0.9}#mermaid-svg-JILWSnb60V5SGqvZ .edgeLabel span{color:#333}#mermaid-svg-JILWSnb60V5SGqvZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-JILWSnb60V5SGqvZ .cluster text{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-JILWSnb60V5SGqvZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JILWSnb60V5SGqvZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-JILWSnb60V5SGqvZ .actor-line{stroke:grey}#mermaid-svg-JILWSnb60V5SGqvZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-JILWSnb60V5SGqvZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-JILWSnb60V5SGqvZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-JILWSnb60V5SGqvZ .sequenceNumber{fill:#fff}#mermaid-svg-JILWSnb60V5SGqvZ #sequencenumber{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-JILWSnb60V5SGqvZ .messageText{fill:#333;stroke:#333}#mermaid-svg-JILWSnb60V5SGqvZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JILWSnb60V5SGqvZ .labelText,#mermaid-svg-JILWSnb60V5SGqvZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-JILWSnb60V5SGqvZ .loopText,#mermaid-svg-JILWSnb60V5SGqvZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-JILWSnb60V5SGqvZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-JILWSnb60V5SGqvZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JILWSnb60V5SGqvZ .noteText,#mermaid-svg-JILWSnb60V5SGqvZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-JILWSnb60V5SGqvZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-JILWSnb60V5SGqvZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-JILWSnb60V5SGqvZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-JILWSnb60V5SGqvZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .section{stroke:none;opacity:0.2}#mermaid-svg-JILWSnb60V5SGqvZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-JILWSnb60V5SGqvZ .section2{fill:#fff400}#mermaid-svg-JILWSnb60V5SGqvZ .section1,#mermaid-svg-JILWSnb60V5SGqvZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-JILWSnb60V5SGqvZ .sectionTitle0{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .sectionTitle1{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .sectionTitle2{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .sectionTitle3{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-JILWSnb60V5SGqvZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .grid path{stroke-width:0}#mermaid-svg-JILWSnb60V5SGqvZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-JILWSnb60V5SGqvZ .task{stroke-width:2}#mermaid-svg-JILWSnb60V5SGqvZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-JILWSnb60V5SGqvZ .task.clickable{cursor:pointer}#mermaid-svg-JILWSnb60V5SGqvZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JILWSnb60V5SGqvZ .taskText0,#mermaid-svg-JILWSnb60V5SGqvZ .taskText1,#mermaid-svg-JILWSnb60V5SGqvZ .taskText2,#mermaid-svg-JILWSnb60V5SGqvZ .taskText3{fill:#fff}#mermaid-svg-JILWSnb60V5SGqvZ .task0,#mermaid-svg-JILWSnb60V5SGqvZ .task1,#mermaid-svg-JILWSnb60V5SGqvZ .task2,#mermaid-svg-JILWSnb60V5SGqvZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutside0,#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutside2{fill:#000}#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutside1,#mermaid-svg-JILWSnb60V5SGqvZ .taskTextOutside3{fill:#000}#mermaid-svg-JILWSnb60V5SGqvZ .active0,#mermaid-svg-JILWSnb60V5SGqvZ .active1,#mermaid-svg-JILWSnb60V5SGqvZ .active2,#mermaid-svg-JILWSnb60V5SGqvZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-JILWSnb60V5SGqvZ .activeText0,#mermaid-svg-JILWSnb60V5SGqvZ .activeText1,#mermaid-svg-JILWSnb60V5SGqvZ .activeText2,#mermaid-svg-JILWSnb60V5SGqvZ .activeText3{fill:#000 !important}#mermaid-svg-JILWSnb60V5SGqvZ .done0,#mermaid-svg-JILWSnb60V5SGqvZ .done1,#mermaid-svg-JILWSnb60V5SGqvZ .done2,#mermaid-svg-JILWSnb60V5SGqvZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-JILWSnb60V5SGqvZ .doneText0,#mermaid-svg-JILWSnb60V5SGqvZ .doneText1,#mermaid-svg-JILWSnb60V5SGqvZ .doneText2,#mermaid-svg-JILWSnb60V5SGqvZ .doneText3{fill:#000 !important}#mermaid-svg-JILWSnb60V5SGqvZ .crit0,#mermaid-svg-JILWSnb60V5SGqvZ .crit1,#mermaid-svg-JILWSnb60V5SGqvZ .crit2,#mermaid-svg-JILWSnb60V5SGqvZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-JILWSnb60V5SGqvZ .activeCrit0,#mermaid-svg-JILWSnb60V5SGqvZ .activeCrit1,#mermaid-svg-JILWSnb60V5SGqvZ .activeCrit2,#mermaid-svg-JILWSnb60V5SGqvZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-JILWSnb60V5SGqvZ .doneCrit0,#mermaid-svg-JILWSnb60V5SGqvZ .doneCrit1,#mermaid-svg-JILWSnb60V5SGqvZ .doneCrit2,#mermaid-svg-JILWSnb60V5SGqvZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-JILWSnb60V5SGqvZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-JILWSnb60V5SGqvZ .milestoneText{font-style:italic}#mermaid-svg-JILWSnb60V5SGqvZ .doneCritText0,#mermaid-svg-JILWSnb60V5SGqvZ .doneCritText1,#mermaid-svg-JILWSnb60V5SGqvZ .doneCritText2,#mermaid-svg-JILWSnb60V5SGqvZ .doneCritText3{fill:#000 !important}#mermaid-svg-JILWSnb60V5SGqvZ .activeCritText0,#mermaid-svg-JILWSnb60V5SGqvZ .activeCritText1,#mermaid-svg-JILWSnb60V5SGqvZ .activeCritText2,#mermaid-svg-JILWSnb60V5SGqvZ .activeCritText3{fill:#000 !important}#mermaid-svg-JILWSnb60V5SGqvZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-JILWSnb60V5SGqvZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-JILWSnb60V5SGqvZ g.clickable{cursor:pointer}#mermaid-svg-JILWSnb60V5SGqvZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JILWSnb60V5SGqvZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-JILWSnb60V5SGqvZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-JILWSnb60V5SGqvZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JILWSnb60V5SGqvZ .dashed-line{stroke-dasharray:3}#mermaid-svg-JILWSnb60V5SGqvZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ .commit-id,#mermaid-svg-JILWSnb60V5SGqvZ .commit-msg,#mermaid-svg-JILWSnb60V5SGqvZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-JILWSnb60V5SGqvZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-JILWSnb60V5SGqvZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JILWSnb60V5SGqvZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JILWSnb60V5SGqvZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JILWSnb60V5SGqvZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-JILWSnb60V5SGqvZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-JILWSnb60V5SGqvZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JILWSnb60V5SGqvZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-JILWSnb60V5SGqvZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-JILWSnb60V5SGqvZ .edgeLabel text{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JILWSnb60V5SGqvZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-JILWSnb60V5SGqvZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-JILWSnb60V5SGqvZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-JILWSnb60V5SGqvZ .note-edge{stroke-dasharray:5}#mermaid-svg-JILWSnb60V5SGqvZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-JILWSnb60V5SGqvZ .error-icon{fill:#522}#mermaid-svg-JILWSnb60V5SGqvZ .error-text{fill:#522;stroke:#522}#mermaid-svg-JILWSnb60V5SGqvZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-JILWSnb60V5SGqvZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-JILWSnb60V5SGqvZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-JILWSnb60V5SGqvZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-JILWSnb60V5SGqvZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-JILWSnb60V5SGqvZ .marker{fill:#333}#mermaid-svg-JILWSnb60V5SGqvZ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-JILWSnb60V5SGqvZ {color: rgba(0, 0, 0, 0.75);font: ;}

代码片段
目 录
Contents
背景介绍
公共代码片段
代码片段种类
代码片段代码
辅助程序
辅助程序功能
辅助程序功
能一览表各
辅助程序代码
辅助程序
应用实例
基本功能
总 结

§01 代码片段


1.1 背景介绍

借助于Python语言的精简特性,很多 深度学习平台 在构建深度神经网络方面都进行了高度的封装。很多情况下,一些介绍性的文章都在强调仅需10句话就可以构成深度学习网络,云云。

尽管如此,精简性与灵活性之间的矛盾一直是横亘在网络编程之间障碍。为此,在paddlepaddle的AI Studio环境中(BML CodeLab)下,集成了一些代码片段库,在一定程度上可以减少输入代码的繁琐性。

1.2 公共代码片段

在BML CodeLab环境下,在左面有公共代码片段工作页,其中包含了很多代码片段。

▲ 图1.2.1 BML CodeLab中的代码片段

1.2.1 代码片段种类

代码片段包含有一下代码片段种类:

  • paddle 2.0
  • Blackhole DataFrame
  • Blackhole ML
  • 描述性统计信息
  • 新建列
  • 缺失值处理
  • Seaborn基本操作
  • Bokeh基本操作
  • Matplotlib基本操作
  • Numpy基本操作
  • seaborn可视化
  • 线性回归
  • DASK DATAFRAMES

在 paddle 2.0 种类中,包含有:

▲ 图1.2.2 paddle 2.0中的代码片段

点击其中一个代码片段,可以打开对应的编辑框:

▲ 图1.2.3 paddle 2.0 快速开始代码片段

将这些代码片段进行拷贝,编可以运行。因此可以实现 0 输入代码的编程。如果想进一步改进,可以在这些代码基础上进行修改编辑即可。

1.2.2 代码片段代码

下面对于Paddle 2.0 中的各个代码片段进行摘录:

(1)快速开始

import paddle
from paddle.vision.transforms import ToTensor# 加载数据集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor())
val_dataset =  paddle.vision.datasets.MNIST(mode='test', transform=ToTensor())# 模型组网
mnist = paddle.nn.Sequential(paddle.nn.Flatten(),paddle.nn.Linear(784, 512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512, 10)
)# 封装模型
model = paddle.Model(mnist)# 配置训练模型
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),paddle.metric.Accuracy())# 模型训练
model.fit(train_dataset,epochs=5,batch_size=64,verbose=1)
# 模型评估
model.evaluate(val_dataset, verbose=0)# 模型测试
model.predict(val_dataset)# 模型保存
model.save('./model')

(2)数据集定义与加载

import paddle# 方法一:飞桨框架自带数据集
print('视觉相关数据集:', paddle.vision.datasets.__all__)
print('自然语言相关数据集:', paddle.text.__all__)# 使用飞桨框架自带数据集
from paddle.vision.transforms import ToTensor
# 训练数据集 用ToTensor将数据格式转为Tensor
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor())# 验证数据集
val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=ToTensor())# 方法二:自定义数据集
from paddle.io import DatasetBATCH_SIZE = 64
BATCH_NUM = 20IMAGE_SIZE = (28, 28)
CLASS_NUM = 10class MyDataset(Dataset):"""步骤一:继承paddle.io.Dataset类"""def __init__(self, num_samples):"""步骤二:实现构造函数,定义数据集大小"""super(MyDataset, self).__init__()self.num_samples = num_samplesdef __getitem__(self, index):"""步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签)"""data = paddle.uniform(IMAGE_SIZE, dtype='float32')label = paddle.randint(0, CLASS_NUM-1, dtype='int64')return data, labeldef __len__(self):"""步骤四:实现__len__方法,返回数据集总数目"""return self.num_samples# 测试定义的数据集
custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM)print('=============custom dataset=============')
for data, label in custom_dataset:print(data.shape, label.shape)break# 数据加载train_loader = paddle.io.DataLoader(custom_dataset, batch_size=BATCH_SIZE, shuffle=True)
# 如果要加载内置数据集,将 custom_dataset 换为 train_dataset 即可for batch_id, data in enumerate(train_loader()):x_data = data[0]y_data = data[1]print(x_data.shape)print(y_data.shape)break

(3)数据预处理

import paddle
print('数据处理方法:', paddle.vision.transforms.__all__)# 场景一:飞桨框架内置数据集 + 数据预处理
from paddle.vision.transforms import Compose, Resize, ColorJitter# 定义想要使用的数据增强方式,这里包括随机调整亮度、对比度和饱和度,改变图片大小
transform = Compose([ColorJitter(), Resize(size=32)])# 通过transform参数传递定义好的数据增强方法即可完成对自带数据集的增强
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)# 场景二:自定义数据集 + 数据预处理from paddle.io import DatasetBATCH_SIZE = 64
BATCH_NUM = 20IMAGE_SIZE = (28, 28)
CLASS_NUM = 10class MyDataset(Dataset):def __init__(self, num_samples):super(MyDataset, self).__init__()self.num_samples = num_samples# 在 `__init__` 中定义数据增强方法,此处为调整图像大小self.transform = Compose([Resize(size=32)])def __getitem__(self, index):data = paddle.uniform(IMAGE_SIZE, dtype='float32')# 在 `__getitem__` 中对数据集使用数据增强方法data = self.transform(data.numpy())label = paddle.randint(0, CLASS_NUM-1, dtype='int64')return data, labeldef __len__(self):return self.num_samples# 测试定义的数据集
custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM)print('=============custom dataset=============')
for data, label in custom_dataset:print(data.shape, label.shape)break

(4)模型组网

import paddle# 方法一:使用飞桨框架内置模型
print('飞桨框架内置模型:', paddle.vision.models.__all__)
lenet = paddle.vision.models.LeNet()
paddle.summary(lenet, (64, 1, 28, 28))# 方法二:Sequential 组网mnist = paddle.nn.Sequential(paddle.nn.Flatten(),paddle.nn.Linear(784, 512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512, 10)
)# 方法三:SubClass 组网
class Mnist(paddle.nn.Layer):def __init__(self):super(Mnist, self).__init__()self.flatten = paddle.nn.Flatten()self.linear_1 = paddle.nn.Linear(784, 512)self.linear_2 = paddle.nn.Linear(512, 10)self.relu = paddle.nn.ReLU()self.dropout = paddle.nn.Dropout(0.2)def forward(self, inputs):y = self.flatten(inputs)y = self.linear_1(y)y = self.relu(y)y = self.dropout(y)y = self.linear_2(y)return y

(5)与测试

import paddle
from paddle.vision.transforms import ToTensor# 加载数据集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor())
val_dataset =  paddle.vision.datasets.MNIST(mode='test', transform=ToTensor())# 模型组网
mnist = paddle.nn.Sequential(paddle.nn.Flatten(),paddle.nn.Linear(784, 512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512, 10)
)# 封装模型
model = paddle.Model(mnist)# 配置训练模型
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),paddle.metric.Accuracy())# 模型训练
model.fit(train_dataset,epochs=5,batch_size=64,verbose=1)
# 模型评估
model.evaluate(val_dataset, verbose=0)# 模型测试
model.predict(val_dataset)

(6)保存预加载

import paddle
from paddle.vision.transforms import ToTensor# 加载数据集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor())
val_dataset =  paddle.vision.datasets.MNIST(mode='test', transform=ToTensor())# 模型组网
mnist = paddle.nn.Sequential(paddle.nn.Flatten(),paddle.nn.Linear(784, 512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512, 10)
)# 封装模型
model = paddle.Model(mnist)# 配置训练模型
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),paddle.metric.Accuracy())# 模型训练
model.fit(train_dataset,epochs=5,batch_size=64,verbose=1)# 模型保存
model.save('./model')# 模型加载
model.load('./model')

对于以上经典代码进行联系和研究,可以帮助理解在PaddlePaddle下构建基础网络的基本过程。

§02 辅助程序


上述代码片段可以看成一个葫芦,可以让初始学比照葫芦画瓢。但是当这些程序熟悉到一定程度,需要进一步改进的时候,此时仅仅通过代码片段的拷贝就显得非常不方便了。下面介绍一个Python辅助程序,可以帮助加速代码的构建。

2.1 辅助程序功能

辅助程序的名称为 aisi,即 AI Studio Insert-Instruction,它通过自带参数,可以自动在 TEASOFT 编辑器中插入编程代码。

2.1.1 辅助程序功能一览表各

这个辅助程序还在不断的完善和增加过程,下面是截止到(2021-12-14)它所具有的基本功能。

序号 参数 说明
1 NULL 直接在程序中插入缺省的头文件
2 mnist 调入MNIST数据包
3 cmd 生成对于AI Studio Notebook操作Python函数
4 c2d 加入paddle.nn.Conv2D函数
5 mp2d 加入paddle.nn.maxPool2D函数
6 L 加入paddle.nn.Linear函数
7 adam 加入paddle.optimizer.Adam函数
8 prep 完成网络训练准备
9 save 保存网络参数
10 load 调入网络参数
11 net 生成网络结构
12 sq 生成Sequency网络结构
13 forward 生成网络结构中的forward函数
14 train 完成网络训练代码
15 update 完成网络训练中的更新环节代码
16 fit 生成网络高级训练fit函数

2.1.2 辅助程序代码

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# AISI.PY                      -- by Dr. ZhuoQing 2021-12-13
#
# Note:
#============================================================from head import *insertstr = 'import paddle\r\nimport paddle.nn.functional as F\r\n\
from paddle import nn\r\n\
from paddle.metric import accuracy as acc\r\n'#------------------------------------------------------------
caretpos = list(tspgetcaretpos())
headspaceself = '\r\n' +  ' '*caretpos[0] + 'self.'
headspace = '\r\n' +  ' '*caretpos[0]
headspaceonly = ' '*caretpos[0]
returnpos = 0#------------------------------------------------------------
if len(sys.argv) > 1:if sys.argv[1][0] == '.':sys.argv[1] = sys.argv[1][1:]maxlen = max([len(s) for s in sys.argv[1:]])argvdim = [s + ' '*(maxlen-len(s)) + ' = ' for s in sys.argv[1:] if len(s) > 0]insertstr = 'self.' + headspaceself.join(argvdim)caretpos[0] += len(argvdim[0]) + 8returnpos = 1#--------------------------------------------------------elif sys.argv[1] == 'cmd':codestr = (
"AIStudio_Title = 'BML CodeLab'",
"def aiscmd(cmd):\r\n"
"    clipboard.copy(cmd+'\\n')",
"    tspsendwindowkey(AIStudio_Title, 'v', control=1)\r\n",
"def aisio(msg):",
"    aiscmd('clear\\necho \"%s\" >io.txt'%msg)",
"def rfchrome(title):",
"    tspsendwindowkey('%s'%title, 'r', control=1)",)insertstr = '\r\n'.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'mnist':codestr = (
"from paddle.vision.transforms import Compose, Normalize",
"transform = Compose([Normalize(mean=[127.5], std=[127.5], data_format='CHW')])",
"train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)",
"test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)",)insertstr = headspace.join(codestr)+'\r\n'printf(insertstr)#--------------------------------------------------------elif sys.argv[1] == 'c2d':ic,oc,ks,stride,padding = '1','6','5','1', ''if len(sys.argv) > 2: ic = sys.argv[2]if len(sys.argv) > 3: oc = sys.argv[3]if len(sys.argv) > 4: ks = sys.argv[4]if len(sys.argv) > 5: stride = sys.argv[5]if len(sys.argv) > 6: padding = sys.argv[6]if padding == '.':padding = str(int(ks)//2)if padding == '0':padding = ''if len(padding) == 0:codestr = (
"paddle.nn.Conv2D(in_channels=%s, out_channels=%s, kernel_size=%s, stride=%s)"%(ic,oc,ks,stride),)else:codestr = (
"paddle.nn.Conv2D(in_channels=%s, out_channels=%s, kernel_size=%s, stride=%s, padding=%s)"%(ic,oc,ks,stride,padding),)insertstr = '\r\n'.join(codestr)caretpos[1] += 1returnpos = 1#--------------------------------------------------------elif sys.argv[1] == 'mp2d':ks,stride = '2','2'codestr = (
"paddle.nn.MaxPool2D(kernel_size=%s, stride=%s)"%(ks,stride),)insertstr = '\r\n'.join(codestr)caretpos[1] += 1returnpos = 1elif sys.argv[1] == 'L':inf,outf = '100','120'if len(sys.argv) > 2: inf = sys.argv[2]if len(sys.argv) > 3: outf = sys.argv[3]codestr = (
"paddle.nn.Linear(in_features=%s, out_features=%s)"%(inf,outf),)insertstr = '\r\n'.join(codestr)caretpos[1] += 1returnpos = 1#--------------------------------------------------------elif sys.argv[1] == 'adam':modelname = 'model'lr = '0.001'if len(sys.argv) > 2:tmp = sys.argv[2]if tmp.replace('.','').isdigit():lr = tmpelse: modelname = tmpif len(sys.argv) > 3:tmp = sys.argv[3]if tmp.replace('.','').isdigit():lr = tmpelse: modelname = tmpcodestr = (
"optim = paddle.optimizer.Adam(learning_rate=%s, parameters=%s.parameters())"%(lr, modelname),)insertstr = '\r\n'.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'prep':modelname = 'model'lr = ''if len(sys.argv) > 2: modelname = sys.argv[2]if len(sys.argv) > 3: lr = sys.argv[3]if len(lr) > 0:codestr = (
"optim = paddle.optimizer.Adam(learning_rate=%s, parameters=%s.parameters())"%(lr,modelname),
"%s.prepare(optimizer=optim, loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy())"%modelname,)else:codestr = (
"%s.prepare(optimizer=paddle.optimizer.Adam(parameters=%s.parameters()),\r\n        loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy())"%(modelname,modelname),)insertstr = '\r\n'.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'save':modelname = 'model'filename = 'model'if len(sys.argv) > 2: modelname = sys.argv[2]if len(sys.argv) > 3: filename = sys.argv[3]codestr = (
"paddle.save(%s.state_dict(), './work/%s.pdparams')"%(modelname, filename),)insertstr = headspace.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'load':modelname = 'model'filename = 'model'if len(sys.argv) > 2: modelname = sys.argv[2]if len(sys.argv) > 3: filename = sys.argv[3]codestr = (
"%s.set_state_dict(paddle.load('./work/%s.pdparams'))"%(modelname, filename),)insertstr = headspace.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'net':netname = 'netmodel'if len(sys.argv) > 2: netname = sys.argv[2]codestr = (
"class %s(paddle.nn.Layer):"%netname,
"    def __init__(self, ):",
"        super(%s, self).__init__()        "%netname,)insertstr = headspace.join(codestr).rstrip(' ')if len(sys.argv) > 3:argvdim = []for s in sys.argv[3:]:sid = s.find('#')flag = 0if sid > 0:if s[sid+1:].isdigit():num = int(s[sid+1:])s = s[:sid]flag = 1for i in range(num):argvdim.append('%s%d'%(s,i+1))if flag == 0: argvdim.append(s)maxlen = max([len(s) for s in argvdim])argvdim = [s + ' '*(maxlen-len(s)) + ' = ' for s in argvdim if len(s) > 0]headspaceself = '\r\n' +  ' '*(caretpos[0]+8) + 'self.'insertstr = insertstr + '\r\n        self.' + headspaceself.join(argvdim)#--------------------------------------------------------elif sys.argv[1] == 'forward':insertstr = 'def forward(self, x):'for s in sys.argv[2:]:insertstr = insertstr  + '\r\n' + headspaceonly + '    'if s == 'flatten':insertstr = insertstr + 'x = paddle.flatten(x, start_axis=1, stop_axis=-1)'elif s == 'relu(x)':insertstr = insertstr + 'x = F.relu(x)'else:appenddim = []sinv = s[::-1]endid = 0for id,a in enumerate(sinv):if a == '.':    appenddim.append('\r\n'+headspaceonly+'    '+'x = F.relu(x)')elif a == '-':  appenddim.append('\r\n'+headspaceonly+'    '+'x = paddle.flatten(x, start_axis=1, stop_axis=-1)')elif a == ',':  appenddim.append('\r\n'+headspaceonly+'    '+'x = F.sigmoid(x)')elif a == ';':  appenddim.append('\r\n'+headspaceonly+'    '+'x = F.softmax(x)')elif a == '|':  appenddim.append('\r\n'+headspaceonly+'    '+'x = F.normalize(x)')else:endid = idbreakif endid > 0:s = s[:-endid]insertstr = insertstr + 'x = self.%s(x)'%sinsertstr = insertstr + ''.join(appenddim[::-1])else:insertstr = insertstr + 'x = self.%s(x)'%sinsertstr = insertstr + '\r\n' + headspaceonly + '    return x'#--------------------------------------------------------elif sys.argv[1] == 'train':codestr = (
"train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True)",
"def train(model):",
"    model.train()",
"    epochs = 2",
"    optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())",
"    for epoch in range(epochs):",
"        for batch_id, data in enumerate(train_loader()):",
"            x_data = data[0]",
"            y_data = data[1]",
"            predicts = model(x_data)",
"            loss = F.cross_entropy(predicts, y_data)",
"            acc = paddle.metric.accuracy(predicts, y_data)",
"            loss.backward()",
"            if batch_id % 100 == 0:",
"                print('epoch: {}, batch_id: {}, loss is: {}, acc is: {}'.format(epoch, batch_id, loss.numpy(), acc.numpy()))",
"            optim.step()",
"            optim.clear_grad()",)insertstr = headspace.join(codestr).rstrip(' ')+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'update':idata = 'x_data'odata = 'y_data'if len(sys.argv) > 2: idata = sys.argv[2]if len(sys.argv) > 3: odata = sys.argv[3]codestr = (
"predicts = model(%s)"%idata,
"loss = F.cross_entropy(predicts, %s)"%odata,
"acc = paddle.metric.accuracy(predicts, %s)"%odata,
"loss.backward()",
"if batch_id % 100 == 0:",
"    print('epoch: {}, batch_id: {}, loss is: {}, acc is: {}'.format(epoch, batch_id, loss.numpy(), acc.numpy()))",
"optim.step()",
"optim.clear_grad()",)insertstr = headspace.join(codestr)+'\r\n'#--------------------------------------------------------elif sys.argv[1] == 'sq':insertstr = 'paddle.nn.Sequential(\r\n'for s in sys.argv[2:]:if s[0] == 'f':    insertstr = insertstr + '    paddle.nn.Flatten(),\r\n'elif s[0] == 'r':  insertstr = insertstr + '    paddle.nn.ReLU(),\r\n'elif s[0] == 'd':  insertstr = insertstr + '    paddle.nn.Dropout(%s),\r\n'%s[1:]elif s[0] == 'l':  insertstr = insertstr + '    paddle.nn.Linear(%s),\r\n'%s[1:]elif s[0] == 'F':  insertstr = insertstr + '    paddle.nn.Flatten(),\r\n'elif s[0] == 'R':  insertstr = insertstr + '    paddle.nn.ReLU(),\r\n'elif s[0] == 'D':  insertstr = insertstr + '    paddle.nn.Dropout(%s),\r\n'%s[1:]elif s[0] == 'L':  insertstr = insertstr + '    paddle.nn.Linear(%s),\r\n'%s[1:]insertstr = insertstr + ')'#--------------------------------------------------------elif sys.argv[1] == 'fit':modelname = 'model'td = 'train_dataset'ep = 5bs = 64if len(sys.argv) > 2:  modelname = sys.argv[2]if len(sys.argv) > 3:  td = sys.argv[3]if len(sys.argv) > 4:  ep = int(sys.argv[4])if len(sys.argv) > 5:  bs = int(sys.argv[5])insertstr = '%s.fit(%s, epochs=%d, batch_size=%d, verbose=1)\r\n'%(modelname, td, ep, bs)#--------------------------------------------------------elif sys.argv[1] == 'xxxx':codestr = ()insertstr = headspace.join(codestr).rstrip(' ')#--------------------------------------------------------elif sys.argv[1] == 'xxxx':codestr = ()insertstr = headspace.join(codestr).rstrip(' ')#--------------------------------------------------------else:printf("Unrecoginized argument.\a")exit()#------------------------------------------------------------
if len(insertstr) > 0:clipboard.copy(insertstr)tsppasteclipboard()if returnpos > 0:tspsetcaretpos(caretpos[0], caretpos[1])#------------------------------------------------------------
printf('\a')#------------------------------------------------------------
#        END OF FILE : AISI.PY
#============================================================

2.2 辅助程序应用实例

2.2.1 基本功能

(1)导入头文件

aisi
import paddle
import paddle.nn.functional as F
from paddle import nn
from paddle.metric import accuracy as acc

(2)调入mnist

aisi mnist
from paddle.vision.transforms import Compose, Normalize
transform = Compose([Normalize(mean=[127.5], std=[127.5], data_format='CHW')])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

(3)构建网络

 aisi sq F L784,512 R D0.2 L512,10
paddle.nn.Sequential(paddle.nn.Flatten(),paddle.nn.Linear(784,512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512,10),
)
 aisi prep model 0.01
optim = paddle.optimizer.Adam(learning_rate=0.01, parameters=model.parameters())
model.prepare(optimizer=optim, loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy())

(4)训练网络

aisi train
train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True)
def train(model):model.train()epochs = 2optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())for epoch in range(epochs):for batch_id, data in enumerate(train_loader()):x_data = data[0]y_data = data[1]predicts = model(x_data)loss = F.cross_entropy(predicts, y_data)acc = paddle.metric.accuracy(predicts, y_data)loss.backward()if batch_id % 100 == 0:print('epoch: {}, batch_id: {}, loss is: {}, acc is: {}'.format(epoch, batch_id, loss.numpy(), acc.numpy()))optim.step()optim.clear_grad()

※ 总  结 ※


利用Python编写的aisi辅助程序,可以在一定程度上缓解简单性与灵活性之间的矛盾。这以个人搭建网络的习惯进行固定,在平时以更小的代码量,更灵活的方式构建深度学习程序。提高程序开发效率。


■ 相关文献链接:

  • 深度学习平台

● 相关图表链接:

  • 图1.2.1 BML CodeLab中的代码片段
  • 图1.2.2 paddle 2.0中的代码片段
  • 图1.2.3 paddle 2.0 快速开始代码片段

在PaddlePaddle中的Notebook代码片段相关推荐

  1. 在 Visual Studio Code 中添加自定义的代码片段

    无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率. 本文介绍如何在 Visual Studio Code 中添加自定义代码片段. 本文内容 Visual Studio Co ...

  2. iPhone3开发基础教程中部分有用代码片段(1)

    <beginning iphone3 development exploring the iphone SDK>一书中有很多基础的代码片段 ,由这些最原始的代码片段组成了我们的复杂的iph ...

  3. webstorm中配置vue代码片段

    ctrl+shift+A 输入live 上述红框插入一下代码:<template> #[[$END$]]# </template><script> export d ...

  4. H5中JavaScript常用代码片段

    /*** 批量替换方法,批量过滤特殊字符,通常用在通过后的各种编辑器添加的内容在App上编辑上使用* james.wang 2016-11-11* 使用方法:ReCont(Content,[" ...

  5. WebApp 开发中常用的代码片段

    其实这里面的多数都是 iOS 上面的代码.其他平台的就没有去验证了. HTML, 从HTML文档的开始到结束排列: <meta name="viewport" content ...

  6. vue源码中优秀代码片段(一)

    一.前言 笔者在读Vue源码时, 手记一些源码中优美的代码片段,一起来学习吧 二.代码片段 1. makeMap 检测某值是否在字符串(逗号分隔的字符串)中存在, 运用了柯里化函数和缓存函数 源码鉴赏 ...

  7. C#-代码片段的使用(1) 039

    代码片段是现成的代码段,可快速插入到代码中.例如,for代码片段可创建一个空for循环. 代码片段 用法:在编辑区域的Main方法中,输入f/fo/for都可以不过输入前两个可能需要在显示的下拉框中寻 ...

  8. 设置 Xcode 自动生成代码片段

    一.什么是代码片段 当在Xcode中输入dowhile并回车后,Xcode会出现下图所示的提示代码: 这就是代码片段,目的是使程序员以最快的速度输入常用的代码片段,提高编程效率.该功能是从Xcode4 ...

  9. 将 Visual Studio 的代码片段导出到 VS Code

    导语 和原文作者一样,水弟我现在也是使用 VS Code 和 Rider 作为主力开发工具,尤其是 VS Code 可以跨平台,又有丰富的插件支持和多种编程语言支持.当我从 VS 转移到以 VS Co ...

最新文章

  1. 极端值目标值(exterem or outlier target)对应的核心特征的分布差异分析+结合catboost特种重要度(top10)
  2. WINCE的内存配置
  3. python判断点在直线的哪一侧_判断点在直线的哪一侧
  4. SQLite3基本使用从shell到python
  5. Spring 自定义注解,配置简单日志注解
  6. MongoDB常用使用场景介绍
  7. Linux之特殊的环境变量IFS以及如何删除带有空格的目录
  8. 在线最大公因数计算器
  9. pstack: Input/output error failed to read target解决
  10. 螺旋数组,之字形数组
  11. 一致性hash算法的应用研究学习
  12. linux e1000e 网卡驱动,Ubuntu安装Intel e1000e千兆网卡
  13. 抖音协议、火山小视频通信协议加密算法研究分析
  14. 小班同学学习经历分享(一)游戏程序员成长札记
  15. hadoop如何解除safemode-安全模式
  16. 医保支付平台项目建设方案
  17. 学习Java软件开发的就业前景怎么样
  18. 【低代码】云端组态集成与设备管理配置
  19. 大数据技术与应用实训心得_大数据心得体会
  20. linux redis自启动

热门文章

  1. jQuery九类选择器
  2. Grunt的配置和使用
  3. lvs中dr模式配置脚本
  4. github访问太慢解决方案
  5. 项目管理中常用到的简便工具
  6. [iOS Animation]-CALayer 图层几何学
  7. matlab中,怎样把矩阵中所有的0改为2
  8. LAMP网站架构方案分析
  9. Web新动力 ——Ajax
  10. 今天有了自己得博客,心情不错。