PaddlePaddle学习--recognize_digits 数字识别 逐行代码解析

这篇博客是关于PaddlePaddle的数字识别教程,作者进行了逐行代码解析,通过AIStudio平台进行详细讲解,并提供了测试图片及训练输出,同时利用Visualdl工具展示了损失函数loss和准确率acc的可视化过程。
摘要由CSDN通过智能技术生成

百度 AIStudio 最详细教程            paddlepaddle 数字识别官网文档

自己学习 逐行代码解析

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Usage   : recognize_digits
            任务描述:使用paddlepaddle训练手写字识别模型
            1、使用数据MNIST;
            2、paddlepaddle平台;
            3、时间 2周
            验收:MNIST训练模型及其效果、CNN原理串讲
          PaddlePaddle训练一次模型完整的过程可以如下几个步骤:
          定义网络结构-->导入数据---->调用模型---->训练模型---->保存模型---->测试结果
Time    : 2019/7/14 16:36
Author  : feng
email   : xx@baidu.com
File    : train.py
"""
# 将python3中的print特性导入当前版本
from __future__ import print_function

import os
# argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数
import argparse
# PIL: Python Imaging Library,是Python平台的图像处理标准库
from PIL import Image
# NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
import numpy
# 导入paddle模块
import paddle
import paddle.fluid as fluid
# 可视化
from visualdl import LogWriter

def parse_args():
    """
    :desc: 解析命令行参数
    :return:返回参数列表
    """
    parser = argparse.ArgumentParser("mnist")
    # 是否连续评估日志
    parser.add_argument('--enable_ce', action='store_true', help="if set,run the task with continuous evaluation logs.")
    # 是否使用gpu
    parser.add_argument('--use_gpu', type=bool, default=False, help="Whether to use GPU or not.")
    # epochs数量
    parser.add_argument('--num_epochs', type=int, default=5, help="number of epochs")
    # batch size
    parser.add_argument('--batch_size', type=int, default=64, help="size of batch")
    args = parser.parse_args()
    return args


def loss_net(hidden, label):
    """
    :desc: 定义交叉熵代价损失函数,分类问题一般使用这个
    :param hidden: 隐藏层
    :param label: 标签
    :return:
    """
    # 预测函数,对输入全连接后激活输出
    # input为输入,size为节点个数,cct激活函数为softmax
    prediction = fluid.layers.fc(input=hidden, size=10, act='softmax')
    # 交叉熵损失函数:使用预测值和实际标签计算损失
    loss = fluid.layers.cross_entropy(input=prediction, label=label)
    # 平均损失
    avg_loss = fluid.layers.mean(loss)
    # 使用预测值作为输入和标签计算准确率
    acc = fluid.layers.accuracy(input=prediction, label=label)
    return prediction, avg_loss, acc


def softmax_regression(img, label):
    """
    :desc: softmax回归模型,对输入进行全连接方式获取特征,然后直接通过softmax函数计算多个类别的概率
           所以img作为模型的输入,既是损失函数的输入
    :param img: 输入层 图片
    :param label: 标签
    :return: 损失函数结果
    """
    return loss_net(img, label)


def multilayer_perceptron(img, label):
    """
    :desc: 多次感知模型,采用最简单的两层神经网络,只有输入和输出层,为了达到更好的拟合效果,在中间加两个隐藏层
    :param img: 输入层图片
    :param label: 图片标签
    :return: 损失函数结果
    """
    # 输入层+2个隐藏层
    hidden1 = fluid.layers.fc(input=img, size=200, act='tanh')
    hidden2 = fluid.layers.fc(input=hidden1, size=200, act='tanh')
    return loss_net(hidden2, label)


def convolutional_neural_network(img, label):
    """
    :desc: 卷积神经网络CNN,LeNet-5,输入的二维图像,先经过两次卷积层到池化层,再经过全连接,最后使用softmax函数分类最为输出
    :param img: 输入图像
    :param label: 图像标签
    :return: 损失函数结果
    """
    # 第1次卷积+池化
    conv_pool_1 = fluid.nets.simple_i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值