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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度 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_img_conv_pool(
        input=img,  # 输入图像的格式为【N,C,H,】
        filter_size=5,  # 滤波器大小(H
### 使用Python对REST-API-ASR_Python_Audio_16K.M4A文件进行语音识别 要完成对 `rest-api-asr_python_audio_16k.m4a` 文件的语音识别任务,可以按照以下方式操作: #### 准备工作 确保已设置好 Python 虚拟环境并安装必要的依赖项。推荐使用 Python 3.10 版本[^2]。 #### 安装所需库 需要安装百度 AIP 库以及处理音频文件的相关库: ```bash pip install baiduaip pydub ffmpeg-python ``` #### 音频预处理 由于百度语音 API 支持特定格式(如 PCM 或 WAV),可能需要先将 M4A 文件转换为目标格式。以下是转换代码示例: ```python from pydub import AudioSegment def convert_m4a_to_wav(input_file, output_file): audio = AudioSegment.from_file(input_file, format="m4a") audio.export(output_file, format="wav") input_file = "rest-api-asr_python_audio_16k.m4a" output_file = "converted_audio.wav" convert_m4a_to_wav(input_file, output_file) ``` #### 百度语音识别接口调用 通过百度语音开放平台提供的 RESTful 接口实现语音转文字的功能。具体步骤如下: 1. **获取 Access Token** 访问百度开发者中心申请应用,并获取 API Key 和 Secret Key 后生成访问令牌。 2. **上传音频数据** 将音频文件编码为 Base64 字符串并通过 JSON 数据包发送给服务器。 下面是完整的代码实现: ```python import base64 import requests # 获取 access token 的函数 def fetch_token(api_key, secret_key): url = f"https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}" response = requests.get(url) result = response.json() return result["access_token"] # 发送请求到百度 ASR 接口 def recognize_speech(audio_path, api_key, secret_key): with open(audio_path, 'rb') as file: data = file.read() # 编码为 base64 speech_base64 = base64.b64encode(data).decode('utf-8') # 构建 POST 请求参数 params = { "format": "wav", "rate": 16000, "dev_pid": 1537, # 中文普通话模型 ID "speech": speech_base64, "cuid": "your_unique_device_identifier", # 替换为设备唯一标识符 "len": len(speech_base64), "channel": 1, "token": fetch_token(api_key, secret_key) } headers = {'Content-Type': 'application/json'} response = requests.post("http://vop.baidu.com/server_api", json=params, headers=headers) if response.status_code == 200: result = response.json() if "result" in result: return result["result"][0] else: raise Exception(f"Error occurred: {result}") else: raise Exception(f"Request failed with status code {response.status_code}") if __name__ == "__main__": api_key = "YOUR_API_KEY" # 替换为实际值 secret_key = "YOUR_SECRET_KEY" # 替换为实际值 recognized_text = recognize_speech(output_file, api_key, secret_key) print(recognized_text) ``` 上述代码基于隐式发送的方式实现语音识别功能[^4]。 --- ### 注意事项 - 确保音频文件采样率为 16kHz,单声道,PCM/WAV 格式[^3]。 - 如果遇到错误,请查阅官方文档以确认参数配置是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值