本文所依赖的环境如下,主要还是paddlepaddle:
paddlepaddle(2.3.1) cifar数据集1.cifar数据集
cifar数据集官网:CIFAR-10 and CIFAR-100 datasets
cifar的数据集有10分类和100分类图片,图片大小为(32,32,3),其中cifar10数据集有6万张图片10分类,5万训练集和10万训练集。
2. 模型训练与验证
第一步,python引入所需的paddle依赖。
import paddle from paddle.vision.transforms import Normalize,Compose,Transpose,Resize
第二步,获取cifar数据集,这里paddlepaddle支持直接获取cifar数据集,但是其数据格式是HWC,channel在后,由于paddlepaddle的模型和pytorch都默认的是CHW数据格式,所以我们加上转置函数Transpose,由于cifar图片本身过小,扩大size到(227,227,3)。
transform = Compose([Resize(227),Normalize(mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], data_format='HWC'),Transpose()]) train_dataset = paddle.vision.datasets.Cifar10(mode='train',transform=transform,backend='cv2') test_dataset = paddle.vision.datasets.Cifar10(mode='test',transform=transform,backend='cv2')
第三步,构建模型,在这里我们直接使用paddlepaddle的内置模型vgg,这是一个由3*3卷积层堆叠的模型,相当基础的模型。
alexnet = paddle.vision.models.vgg11(batch_norm=True,num_classes=10) model = paddle.Model(alexnet)
第四步,配置优化器,损失函数,由于是多分类任务,我们选择交叉熵损失函数。
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
第五步,vgg模型训练,配置epoch,batch_size等。
model.fit(train_dataset, epochs=50, batch_size=1024, verbose=1)
第六步 ,vgg模型在测试集上做最终验证。
model.evaluate(test_dataset,batch_size=1024,verbose=1)
最后,执行训练。放出全部代码,可以看到paddlepaddle在传统图片分类上可以很容易的得到结果。
import paddle
from paddle.vision.transforms import Normalize,Compose,Transpose,Resize
transform = Compose([Resize(227),Normalize(mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], data_format='HWC'),Transpose()])
train_dataset = paddle.vision.datasets.Cifar10(mode='train',transform=transform,backend='cv2')
test_dataset = paddle.vision.datasets.Cifar10(mode='test',transform=transform,backend='cv2')
alexnet = paddle.vision.models.resnet(num_classes=10)
model = paddle.Model(alexnet)
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
model.fit(train_dataset, epochs=50, batch_size=128, verbose=1)
model.evaluate(test_dataset, batch_size=128, verbose=1)
总结,本文主要对cifar数据集进行paddlepaddle的模型训练,代码简洁,可以看出paddle在集成上是非常好的。



