神经网络字符分类

按照题目要求修改了多层感知机

题目将图片的每个点作为输入,其中大小为28*28,中间有两个大小为100的隐藏层,激活函数是relu,然后输出大小是10,激活函数是softmax

优化器是Adam,结合了AdaGrad和RMSProp算法的优点,为每个参数计算自适应的学习率。

损失函数是交叉熵损失的函数,通常用于分类问题,交叉熵损失函数衡量的是实际输出(probability distribution)与期望输出(true labels)的相似程度,在多分类问题中特别有用。

准确率(Accuracy)指标衡量的是模型预测正确的样本数与总样本数之间的比例。

epochs:训练的轮数5

batch_size:每次训练时使用的样本数量64

---------------------------------------------------------------------------------------------------------------------------------

本实践使用多层感知器训练(DNN)模型,用于预测手写数字图片。

本次实验主要考查以下内容 (1)尝试调整隐藏层单元数量、激活函数、隐藏层数量对于模型性能的影响 激活函数参照https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/Overview_cn.html#activation-functional 或paddle.nn.functional (2)调整不同的训练的迭代轮次(epoch)、学习率、优化器并学会观察训练阶段与测试阶段loss变化,并依据此调整模型 优化器、学习率可参照https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/Overview_cn.html (2)补全测试数据集上计算accuracy的过程,可以采用model下的evaluate,也可以利用predict之后的result结果进行计算 模型训练与评估相关API调用举例 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/Model_cn.html

首先导入必要的包

numpy---------->python第三方库,用于进行科学计算

PIL------------> Python Image Library,python第三方图像处理库

matplotlib----->python的绘图库 pyplot:matplotlib的绘图框架

os------------->提供了丰富的方法来处理文件和目录

#导入需要的包
import numpy as np
import paddle as paddle
import paddle.nn as nn
import paddle.nn.functional as F
from PIL import Image
import matplotlib.pyplot as plt
import paddle
from paddle.io import Dataset
import os
print("本教程基于Paddle的版本号为:"+paddle.__version__)
! python -m pip install visualdl -i https://mirror.baidu.com/pypi/simple

Step1:准备数据。

(1)数据集介绍

MNIST数据集包含60000个训练集和10000测试数据集。分为图片和标签,图片是28*28的像素矩阵,标签为0~9共10个数字。

(2)transform函数是定义了一个归一化标准化的标准

(3)train_dataset和test_dataset

paddle.vision.datasets.MNIST()中的mode='train'和mode='test'分别用于获取mnist训练集和测试集

transform=transform参数则为归一化标准

#导入数据集Compose的作用是将用于数据集预处理的接口以列表的方式进行组合。
#导入数据集Normalize的作用是图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
from paddle.vision.transforms import Compose, Normalize
transform = Compose([Normalize(mean=[127.5],std=[127.5],data_format='CHW')])
# 使用transform对数据集做归一化
print('下载并加载训练数据')
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
#print(np.array(test_dataset).shape)
print('加载完成')
#让我们一起看看数据集中的图片是什么样子的
train_data0, train_label_0 = train_dataset[0][0],train_dataset[0][1]
train_data0 = train_data0.reshape([28,28])
plt.figure(figsize=(2,2))
print(plt.imshow(train_data0, cmap=plt.cm.binary))
print('train_data0 的标签为: ' + str(train_label_0))
AxesImage(25,22;155x154)
train_data0 的标签为: [5]
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:425: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead
  a_min = np.asscalar(a_min.astype(scaled_dtype))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:426: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead
  a_max = np.asscalar(a_max.astype(scaled_dtype))
#让我们再来看看数据样子是什么样的吧
print(train_data0)

Step2.网络配置

以下的代码判断就是定义一个简单的多层感知器,一共有三层,两个大小为100的隐层和一个大小为10的输出层,因为MNIST数据集是手写0到9的灰度图像,类别有10个,所以最后的输出大小是10。最后输出层的激活函数是Softmax,所以最后的输出层相当于一个分类器。加上一个输入层的话,多层感知器的结构是:输入层-->>隐层-->>隐层-->>输出层。

# 定义多层感知器  
#动态图定义多层感知器
class mnist(paddle.nn.Layer):
    def __init__(self):
        super(mnist,self).__init__()
        #输入通道784,输出通道100
        self.conv1=nn.Linear(in_features=784,out_features=100)
        #输入通道100,输出通道100
        self.conv2=nn.Linear(in_features=100,out_features=100)
        #输入通道100,输出通道10
        self.conv3=nn.Linear(in_features=100,out_features=10)


    def forward(self, input_):
        x = paddle.reshape(input_, [input_.shape[0], -1])
        # print(x.shape)[64, 784]
        y=F.relu(self.conv1(x))
        y=F.relu(self.conv2(y))
        y=F.softmax(self.conv3(y))
        return y

 


from paddle.metric import Accuracy

# 用Model封装模型
model = paddle.Model(mnist())   

# 定义损失函数
optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())

# 配置模型
model.prepare(optim,paddle.nn.CrossEntropyLoss(),Accuracy())

Step3.模型训练及评估

callback = paddle.callbacks.VisualDL(log_dir='visualdl_log_dir')
# 训练保存并验证模型
model.fit(train_dataset,test_dataset,epochs=5,batch_size=64,save_dir='multilayer_perceptron',verbose=1)

#模型预测
result = model.predict(test_dataset, batch_size=1)


#请补全模型性能验证代码,可使用model下的evaluate函数或者利用上面的预测出来的结果

model.evaluate(test_dataset,verbose=1)
test_data0, test_label_0 = test_dataset[0][0],test_dataset[0][1]

ress=model.predict_batch(test_data0)

test_data0 = test_data0.reshape([28,28])
plt.figure(figsize=(2,2))
#展示测试集中的第一个图片
print(plt.imshow(test_data0, cmap=plt.cm.binary))
print('test_data0 的标签为: ' + str(test_label_0))


print('test_data0 预测的数值为:' ,end='')
print(ress)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/707760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【elementui源码解析】如何实现自动渲染md文档-第三篇

目录 1.前言 2.webpack.demo.js 3.markdown文档 4.fence.js 1)tokens 2)::: 3) 5.containers.js 1)markdown-it-container 2)md.use() 3)代码逻辑 4)containers小结 6.congfig.js …

Stable Diffusion【光影文字】:绚丽光影,文字与城市夜景的光影之约

今天我们我们结合城市夜景背景来看一下光影文字的效果,我们先来看一下效果图。 一. 字融城市夜景制作光影文字方法 【第一步】:制作底图这里制作底图使用黑底白字。我们使用美图秀秀制作一个"小梁子"字的底图。 字体:默认字体 图…

怕怕怕怕怕怕怕怕怕怕

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

期望14K,某小公司java社招面试经历

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 面试的是一家几百人的公司,基本面试的考察有八股文,也有按照项目问你的,总的来说比较全面吧 1、java代理模式 …

郑州企业资信评价资质:工程咨询单位专业资信申报材料清单

在郑州企业申请工程咨询单位专业资信评价资质时,需要准备一系列详细的申报材料。以下是根据参考文章中的相关数字和信息,清晰、分点表示和归纳的工程咨询单位专业资信申报材料清单: 一、基础材料 企业法人营业执照:提供企业法人营…

统计nginx访问日志前十名

可用下面五种方式来查看: 1. grep -oP ‘^\S’ access.log |sort -rn |uniq -c |sort -rn |head 命令详细讲解: grep: 是一个文本搜索工具,允许你在文件中搜索特定的模式。 -o: 只输出匹配的部分,而不是整行。 -P: 使用Perl兼容的…

Introducing Index-1.9B

简介 大家好,今天我们很高兴首次发布Index系列模型中的轻量版本:Index-1.9B系列 本次开源的Index-1.9B 系列包含以下模型: Index-1.9B base : 基座模型,具有 19亿 非词嵌入参数量,在2.8T 中英文为主的语料上预训练&…

【JavaEE精炼宝库】多线程(5)单例模式 | 指令重排序 | 阻塞队列

目录 一、单例模式: 1.1 饿汉模式: 1.2 懒汉模式: 1.2.1 线程安全的懒汉模式: 1.2.2 线程安全的懒汉模式的优化: 二、指令重排序 三、阻塞队列 3.1 阻塞队列的概念: 3.2 生产者消费者模型&#xf…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别,箭头函数主要解决什么问题? 箭头函数与普通函数的区别: ⚫ 语法简洁性: ◼ 箭头函数使用>符号定义,省略了 function 关键字,使得语法更为紧凑。 ◼ 对于单行函…

剖析框架代码结构的系统方法(下)

当面对Dubbo、Spring Cloud、Mybatis等开源框架时,我们可以采用一定的系统性的方法来快速把握它们的代码结构。这些系统方法包括对架构演进过程、核心执行流程、基础架构组成和可扩展性设计等维度的讨论。 在上一讲中,我们已经讨论了架构演进过程和核心执行流程这两个系统方法…

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出(含动图) 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

深入解析MySQL的层次化设计

一、基础架构 1.连接器 1.会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接 2.用户密码连接成功之后,会从权限表中拿出你的权限,后续操作权限都依赖于此时拿出的权限,这就意味着当链…

Github 2024-06-14 开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目2Python项目2非开发语言项目2TypeScript项目1Dart项目1Rust项目1Lua项目1Java项目1Jupyter Notebook项目1从零开始构建你喜爱的技…

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 文档讲解:代码随想录 状态:还可以 思路: 如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。 节点值小于low:如果节点的值小于low&#xff…

【机器学习】简答

1.什么是机器学习? 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导 “预测”。计…

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展,我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力,正为我们每个人带来前所未有的红利。 那么,面对数字经济的红利,我们是否已经做好了准备?我们又该如何把握这个时代赋予我们的机…

内存卡提示需要格式化?别急,这样拯救你的数据

一、内存卡突然提示需要格式化 在日常生活中,我们经常会使用到内存卡来存储照片、视频、文档等重要数据。然而,有时当我们试图访问内存卡时,却会遭遇一个令人头疼的问题——系统突然提示“内存卡需要格式化”。这意味着我们无法直接读取或写…

不愧是字节,图像算法面试真细致

这本面试宝典是一份专为大四、研三春招和研二暑假实习生准备的珍贵资料。 涵盖了图像算法领域的核心知识和常见面试题,包括卷积神经网络、实例分割算法、目标检测、图像处理等多个方面。不论你是初学者还是有经验的老手,都能从中找到实用的内容。 通过…

自动控制理论---零点和极点、单位脉冲响应

1、实验设备 PC计算机1台,MATLAB软件1套。 2、实验目的 研究四个具有相同极点分布但不同零点分布的二阶系统对单位脉冲响应的影响。绘制各系统的零点和极点分布图。计算并绘制各系统的单位脉冲响应波形。分析零点分布对单位脉冲响应的影响。 3、实验原理说明&am…

vue3和ant-design 实现前端多种验证密码规则,最全的前端验证密码规则

1、小眼睛可以显示/隐藏明文密码(无法用input typepassword,用css样式实现切换明文) 2、输入长度统计(不是自带的,用div写的,然后定位到框内的) 3、每输入一个字符分别验证每一项规则&#xf…