在PaddlePaddle中的Notebook代码片段
简 介: ※利用Python编写的aisi辅助程序,可以在一定程度上缓解简单性与灵活性之间的矛盾。这以个人搭建网络的习惯进行固定,在平时以更小的代码量,更灵活的方式构建深度学习程序。提高程序开发效率。
关键词
: AI studio,PaddlePaddle,asis
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代码片段相关推荐
- 在 Visual Studio Code 中添加自定义的代码片段
无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率. 本文介绍如何在 Visual Studio Code 中添加自定义代码片段. 本文内容 Visual Studio Co ...
- iPhone3开发基础教程中部分有用代码片段(1)
<beginning iphone3 development exploring the iphone SDK>一书中有很多基础的代码片段 ,由这些最原始的代码片段组成了我们的复杂的iph ...
- webstorm中配置vue代码片段
ctrl+shift+A 输入live 上述红框插入一下代码:<template> #[[$END$]]# </template><script> export d ...
- H5中JavaScript常用代码片段
/*** 批量替换方法,批量过滤特殊字符,通常用在通过后的各种编辑器添加的内容在App上编辑上使用* james.wang 2016-11-11* 使用方法:ReCont(Content,[" ...
- WebApp 开发中常用的代码片段
其实这里面的多数都是 iOS 上面的代码.其他平台的就没有去验证了. HTML, 从HTML文档的开始到结束排列: <meta name="viewport" content ...
- vue源码中优秀代码片段(一)
一.前言 笔者在读Vue源码时, 手记一些源码中优美的代码片段,一起来学习吧 二.代码片段 1. makeMap 检测某值是否在字符串(逗号分隔的字符串)中存在, 运用了柯里化函数和缓存函数 源码鉴赏 ...
- C#-代码片段的使用(1) 039
代码片段是现成的代码段,可快速插入到代码中.例如,for代码片段可创建一个空for循环. 代码片段 用法:在编辑区域的Main方法中,输入f/fo/for都可以不过输入前两个可能需要在显示的下拉框中寻 ...
- 设置 Xcode 自动生成代码片段
一.什么是代码片段 当在Xcode中输入dowhile并回车后,Xcode会出现下图所示的提示代码: 这就是代码片段,目的是使程序员以最快的速度输入常用的代码片段,提高编程效率.该功能是从Xcode4 ...
- 将 Visual Studio 的代码片段导出到 VS Code
导语 和原文作者一样,水弟我现在也是使用 VS Code 和 Rider 作为主力开发工具,尤其是 VS Code 可以跨平台,又有丰富的插件支持和多种编程语言支持.当我从 VS 转移到以 VS Co ...
最新文章
- 极端值目标值(exterem or outlier target)对应的核心特征的分布差异分析+结合catboost特种重要度(top10)
- WINCE的内存配置
- python判断点在直线的哪一侧_判断点在直线的哪一侧
- SQLite3基本使用从shell到python
- Spring 自定义注解,配置简单日志注解
- MongoDB常用使用场景介绍
- Linux之特殊的环境变量IFS以及如何删除带有空格的目录
- 在线最大公因数计算器
- pstack: Input/output error failed to read target解决
- 螺旋数组,之字形数组
- 一致性hash算法的应用研究学习
- linux e1000e 网卡驱动,Ubuntu安装Intel e1000e千兆网卡
- 抖音协议、火山小视频通信协议加密算法研究分析
- 小班同学学习经历分享(一)游戏程序员成长札记
- hadoop如何解除safemode-安全模式
- 医保支付平台项目建设方案
- 学习Java软件开发的就业前景怎么样
- 【低代码】云端组态集成与设备管理配置
- 大数据技术与应用实训心得_大数据心得体会
- linux redis自启动