课程连接:
飞桨开源框架(PaddlePaddle)是一个易用、高效、灵活、可扩展的深度学习框架。自2.0版本颁布以来,简洁的代码设计、高效的数据转换让paddle入门学习不再成为难题!
与两大常用框架不同的是,paddle2.0同时支持 动态图和 静态图模式。同时,丰富的低层API和高效的高层API能够帮助您轻松实现您的任何想法。 xxtorch和xxras合体有木有啊!!!
深度学习,有卡才能笑到最后。良心百度为广大用户(穷学生们)推出 AI Studio在线学习平台,工业界最强 Tesla V100算力任你白嫖!!!xdm冲起来!!!
接下来,本文将用柠檬分类的例子为大家介绍一个完整的开发流程。
预训练模型
深度学习最重要的是什么?是数据!!!
可实际应用中,我们无法收集到那么多的数据。这个时候就需要使用预训练模型。相同模型,使用or not预训练参数,最后训练结果往往会差距很大。
paddle也为我们提供了基本的预训练模型和参数(ImageNet)。
常见模型有: VGG系列、ResNet系列、MobileNet系列
import paddle
from paddle.vision.models import resnet50
build model
model = resnet50()
build model and load imagenet pretrained weight
model = resnet50(pretrained=True)
x = paddle.rand([1, 3, 224, 224])
out = model(x)
print(out.shape)
自定义模型
在预训练模型的基础上,我们需要修改一下结果来符合任务要求。
下面,我们将添加Dropout层,来减少过拟合的发生。
#定义模型
class resNet(paddle.nn.Layer):
def __init__(self):
super(resNet,self).__init__()
#加载resnet101
self.layer=paddle.vision.models.resnet101(pretrained=True)
# dropout层
self.dropout = paddle.nn.Dropout(0.5)
# 全连接层
self.fc1 = paddle.nn.Linear(1000,100)
self.fc2 = paddle.nn.Linear(100, 4)
#网络的前向计算过程
def forward(self,x):
x=self.layer(x)
x = self.dropout(x)
x=self.fc1(x)
x = self.dropout(x)
x=self.fc2(x)
return x
至此,我们成功定义了自己的修改版resNet。
高层API训练
paddle2.0提供了丰富的高层API函数,让我们仅用一两行代码就能完成任务的训练与调参。
模型封装
model_res = resNet()
model = paddle.Model(model_res)
#学习率策略
scheduler = paddle.optimizer.lr.LinearWarmup(
learning_rate=0.0003, warmup_steps=20, start_lr=0, end_lr=0.003, verbose=False)
定义优化器
optim = paddle.optimizer.SGD(learning_rate=scheduler, parameters=model.parameters())
配置模型
model.prepare(
optim,
paddle.nn.CrossEntropyLoss(soft_label=True),
Accuracy()
)
模型训练与评估
model.fit(train_loader,
val_loader,
log_freq=10,
epochs=80,
# callbacks=Callbk(write=write, iters=iters),
verbose=1,
)
评估精度
也是一行代码完成对测试集的精度评估,非常方便。
result = model.evaluate(val_loader,batch_size=64,log_freq=100, verbose=1, num_workers=0, callbacks=None)
我们的修改版resnet101训练80个epoch后,在柠檬分类数据集上的测试集精度可以达到90.69%
Eval samples: 290
Eval begin...
The loss value printed in the log is the current batch, and the metric is the average value of previous step.
step 5/5 [==============================] - loss: 0.5985 - acc: 0.9069 - 567ms/step
简单几行代码就完成了任务。更好的体验请大家到AI Studio课程栏目里去体验。
Original: https://blog.csdn.net/qq_33441431/article/details/114543818
Author: qq_33441431
Title: 百度飞桨(Paddle2.0)预训练模型加载、训练、预防过拟合(Dropout)–以柠檬分类数据集为例
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/666910/
转载文章受原作者版权保护。转载请注明原作者出处!