目录
1.paddle安装
点击官网查看下载的版本,一般安装的版本不易过高,因为版本过高会出现一定的问题,尽量安装版本比较低的。
提示:根据选择版本之后,将“安装命令”复制到已经激活的anaconda环境中进行安装(IDEA可以选择Pycharm)。
2.paddle实现LeNet5模型以及训练
提示:对于深度学习中的LeNet5模型,对于大部分人来说应该是非常熟悉的,用于手写体数字识别的网络。但是下面将使用paddle库中已经实现的LeNet5进行模型的训练以及手写体的预测(这样做只是为了开始学习paddle)。
"""
@Author : Keep_Trying_Go
@Major : Computer Science and Technology
@Hobby : Computer Vision
@Time : 2023/7/20 22:17
"""
import paddle
import numpy as np
import matplotlib.pyplot as plt
from paddle.vision.transforms import Normalize
def loadDataset():
#由于手写体图像是单通道的,所以进行归一化的时候列表中只对一个通道的值进行归一化
transform = Normalize(
mean=[127.5],
std=[127.5],
data_format='CHW'
)
train_dataset = paddle.vision.datasets.MNIST(
mode='train',
transform=transform,
download=True
)
test_dataset = paddle.vision.datasets.MNIST(
mode='test',
transform=transform,
download=True
)
return train_dataset,test_dataset
def train():
train_dataset,test_dataset = loadDataset()
#初始化网络模型
lenet5 = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(lenet5)
#网络模型训练配置,准备损失函数,优化器和评价指标
model.prepare(
paddle.optimizer.Adam(parameters=model.parameters(),learning_rate=0.001),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy()
)
#模型的训练
model.fit(
train_dataset,
epochs=10,
batch_size=16,
verbose=1
)
#模型的评估
model.evaluate(
test_dataset,
batch_size=16,
verbose=1
)
#保存模型
model.save('runs/mnist')
return train_dataset,test_dataset
提示:保存好模型时会将优化器和网络模型的参数一起保存,如下:
def predict():
#加载模型
model = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(model)
#将训练保存的模型参数加载到网络模型中
model.load('runs/mnist.pdparams')
#加载数据集
_,test_dataset = loadDataset()
#只取第一张图像
img,label = test_dataset[0]
# 将图片shape从1*28*28变为1*1*28*28,增加一个batch维度,以匹配模型输入格式要求
img_batch = np.expand_dims(img.astype('float32'),axis=0)
#得到预测的结果
out = model.predict_batch(img_batch)[0]
#得到预测最大类别概率的索引
pred_label = out.argmax()
print('true label: {} pred label: {}'.format(label[0],pred_label))
plt.imshow(img[0])
plt.show()
if __name__ == '__main__':
# train()
predict()
提示:读者也可以到官网进行学习,这里主要是对其中的一些补充和总结,比如在加载模型的时候,该怎么对训练的保存之后的模型进行加载。