paddlepaddle深度学习框架训练LeNet5模型(一)

目录

1.paddle安装

2.paddle实现LeNet5模型以及训练


史上最全最详细的Anaconda安装教程

anaconda 创建虚拟环境、激活及使用的基本方法

现在比较主流的深度学习框架

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()

 

 提示:读者也可以到官网进行学习,这里主要是对其中的一些补充和总结,比如在加载模型的时候,该怎么对训练的保存之后的模型进行加载。

猜你喜欢

转载自blog.csdn.net/Keep_Trying_Go/article/details/131860456