[Deep Learning]——MNIST数据集

2023-11-01

现实生活中,银行卡识别、车牌识别、快递货号识别是很常用的功能,这些都设计到手写字识别相关的内容。

手写数字数据集:MNIST 

数据集大小:每张大小 28 * 28,共7000张图片 

推理阶段(也称:前向传播)

神经网络的输入层有784个神经元,输出层有10个神经元。

  • 输入层的784这个数字来源于图像大小 28 * 28 = 784
  • 输出层的10来源于10类别分类
  • 此外需要注意的是:这个神经网络有2个隐藏层,第一个隐藏层有50个神经元,第2个隐藏层有100个神经元,但是这里的50和100可以设置成任何值
  • 注:下面代码中需要的文件,自行在资料链接:https://pan.baidu.com/s/1ck1U3n1sTv6LFcoB0l6l4w 提取码:7ve5中下载

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import numpy as np
from dataset.mnist import load_mnist
from PIL import Image
import pickle

#sigmoid函数实现
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

#softmax函数实现
def softmax(x):
    c = np.max(x)
    exp_x = np.exp(x-c) #解决溢出问题
    sum_exp = np.sum(exp_x)
    y = exp_x / sum_exp
    return y

#图片展示
def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

#获取数据
def get_data():
    #返回 (训练图像,训练标签),(测试图像,测试标签)形式数据
    (x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
    return x_test, t_test

#初始化网络
def init_network():
    with open('../dataset/sample_weight.pkl', 'rb') as f:
        network = pickle.load(f)
    return network

#预测
def predict(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    #网络传递
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = softmax(a3)
    return y

#评价识别精度
def assess_accuracy():
    x, t = get_data()
    #网络初始化
    network = init_network()

    accuracy_cnt = 0
    for i in range(len(x)):
        y = predict(network, x[i])
        #softmax 返回的值在【0~1】之间,所有返回值的总和是1
        #在使用到softmax时,一般直接把返回值当作概率
        p = np.argmax(y) #获取概率最高元素的索引
        if(p == t[i]):
            accuracy_cnt += 1
    print("Accuracy: " + str(float(accuracy_cnt) / len(x)))

if __name__ == '__main__':
    assess_accuracy()

 1、批处理

现在我们来考虑打包输入多张图像的情形,比如我们想用predict()函数一次处理100张图片,也即每次输入是:100 X 784,表示一次输入的100张图像的结果被一次性输出了,这种打包式输入数据的方式称为:批(batch)

#批处理方式处理,每次输入100张图片
def batch_assess_accuracy():
    x, t = get_data()
    # 网络初始化
    network = init_network()

    batch_size = 100 #批处理
    accuracy_cnt = 0
    #一次取 batch张图片
    for i in range(0, len(x), batch_size):
        x_batch = x[i:i+batch_size]
        y_batch = predict(network, x_batch)
        # softmax 返回的值在【0~1】之间,所有返回值的总和是1
        # 在使用到softmax时,一般直接把返回值当作概率
        p = np.argmax(y_batch, axis=1)  # 获取概率最高元素的索引
        # p == t[i:i+batch_size]这里就会判断是否相同
        accuracy_cnt += np.sum(p == t[i:i+batch_size])
    print("Accuracy: " + str(float(accuracy_cnt) / len(x)))

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Deep Learning]——MNIST数据集 的相关文章

  • 整流器+逆变器。 前级采用PWM整流器,采用双闭环前馈解耦控制

    整流器 逆变器 前级采用PWM整流器 采用双闭环前馈解耦控制 实现并网单位功率因数 稳定直流电压 后级采用两电平逆变器 通过双闭环前馈解耦控制 稳定输出电压 整个仿真环境完全离散化 运行时间更快 主电路与控制部分以不同的步长运行 更加贴合实
  • CentOS7.4 离线升级openssh8.4

    CentOS7 4 离线升级openssh8 4 前言 工作中需要离线升级openssh 网上一些资料说要先安装telnet 这里省略 大家可以先安装telnet 预防更新ssh失败 下载openssl安装包 去https www open
  • 数据分析——时间序列分析模型(AR,MA,ARMA,ARIMA)

    1 概述 时间序列是某个时间段或者某些时间点对应的不同数值的数值对 这些数值对只有两个具体数据 时间要素 数值要素 时间要素可以是某一个时间段或者某一个时刻 例如一个杂货铺一周 七天 的销售额为时间段的时间要素 而一天二十四小时每个整点所对
  • Spring之Bean生命周期源码解析-Bean销毁

    这篇文章是我在系统学习Spring源码之后 基于自己对Spring源码的理解 来详细分析Spring之Bean的销毁过程 目录 前言 一 注册有销毁逻辑的Bean 1 判断当前Bean是否需要销毁 1 1 判断当前Bean是否有销毁方法 1
  • 华为OD机试 - 统计射击比赛成绩(Java)

    题目描述 给定一个射击比赛成绩单 包含多个选手若干次射击的成绩分数 请对每个选手按其最高3个分数之和进行降序排名 输出降序排名后的选手ID序列 条件如下 一个选手可以有多个射击成绩的分数 且次序不固定 如果一个选手成绩少于3个 则认为选手的

随机推荐

  • 03-NodeMCU引脚和接线、点亮外部LED

    Author teacherXue 一 ESP8266 引脚参考 ESP8266 12 E 芯片带有 17 个 GPIO 引脚 并不是所有的ESP8266开发板都开放了所有的GPIO 并且由于电力设计原因 以及有些GPIO有非常特殊的功能
  • malloc函数详解

    一 原型 extern void malloc unsigned int num bytes 头文件 include
  • Pixi的基本使用(5)--寻宝猎人

    寻宝猎人 游戏需求 使用键盘上的箭头键帮助探险家找到宝藏并将其带到出口 怪物在地牢壁之间上下移动 如果探险家触碰到怪物则变成半透明 并且右上角的生命值会减少 如果所有生命值都用光了 会显示 You Lost 如果探险家带着宝藏到达出口 会显
  • QT TCP简单的通信示例

    TCP服务端 第一步 创建监听套接字的QTcpSever QTcpServer m tsTcpServer 第二部步 listen 监听是否有新的连接进来 int iMyport 如果有新的客户端连接的话 会触发信号newConnectio
  • Lyapunov

    一 正定函数 令是向量x的标量函数 S是x空间包含原点的封闭有限区域 如果对于S中所有的x 都有 1 存在且连续 2 3 当时 则V x 是正定的 半正定 的 二 二次型 1 定义 在李雅普诺夫第二方法上的稳定性分析中 二次型函数起着重要作
  • 课时 16 深入理解 etcd:基于原理解析(曾凡松)

    本文将主要分享以下三方面的内容 第一部分 会为大家介绍 etcd 项目发展的整个历程 从诞生至今 etcd 经历的那些重要的时刻 第二部分 会为大家介绍 etcd 的技术架构以及其内部的实现机制 通过对技术架构和内部机制的学习 帮助我们正确
  • 如何在JCreator中导入.jar文件

    本文摘自http www lvchao org 上篇介绍了如何在Eclipse中导入 jar包 这篇将介绍在JCreator中导入 jar包 与上篇一样 先建立一个Project 请注意 建立工程的目的是方便管理和使用 建议那些不喜欢这样做
  • 电脑宏基电脑,【宏基电脑】报价_介绍_图片_评论_咨询-宏基电脑产品大全 -真快乐商城...

    宏基电脑怎么重装系统 标签 时间 2013 10 18 10 27 10 很多朋友有这样的疑问 宏基电脑怎么重装系统 的问题 所以国美小编总结了有关宏基电脑装系统的相关知识 现在和大家一起分享 1 使用宏基电脑自带的系统光盘安装 先要在BI
  • LeetCode 2108. 找出数组中的第一个回文字符串

    给你一个字符串数组 words 找出并返回数组中的 第一个回文字符串 如果不存在满足要求的字符串 返回一个 空字符串 回文字符串 的定义为 如果一个字符串正着读和反着读一样 那么该字符串就是一个 回文字符串 示例 1 输入 words ab
  • multiprocessing.pool详解

    由于python有全局锁限制 如果想利用多核 就需要使用多进程模块 但该模块有很多坑 本篇文章记录一下其用法以及踩过的坑 一 map apply apply async对比 先贴一个对比图 引自multiprocessin pool Mul
  • CmakeList--glog

    file GLOB GLOG LIBRARIES usr lib x86 64 linux gnu libglog so set GLOG INCLUDE DIRS usr include message glog include dirs
  • 安装vb6 正在更新系统 无响应

    新装的win10系统 安装vb6时 最后一直卡在 正在更新系统 程序无响应 没办法 kill掉后 貌似不影响软件使用 但是安装vs6sp6B无法成功安装 解决办法是 不安装 数据访问 组件 参考 http bbs pcbeta com vi
  • 多路采集存储c语言程序,stm32多路巡回数据采集系统设计 含源程序

    此次设计是利用stm32开发板设计的 数据采集系统是模拟域与数字域之间必不可少的纽带 它的存在具有着非常重要的作用 本文介绍的重点是数据采集系统 而该系统硬件部分的重心在于单片机芯片 数据采集与通信控制采用了模块化的设计 数据采集与通信控制
  • qsort的自主实现

    目录 qsort 函数的功能 首先回忆一下冒泡排序是如何实现的 需要改动的地方 compare swap qosrt 函数实现 快速排序实现qsort 已经成功 今天我要分享的是qsort的自主实现 冒泡版qsort 标准是用的快速排序 好
  • Kendo UI开发教程(24): 单页面应用(二) Router 类

    Route类负责跟踪应用的当前状态和支持在应用的不同状态之间切换 Route通过Url的片段功能 url 和流量器的浏览历史功能融合在一起 从而可以支持把应用的某个状态作为书签添加到浏览器中 Route也支持通过代码在应用的不同状态之间切换
  • spring-security--基础--02--核心组件

    spring security 基础 02 核心组件 1 SecurityContextHolder 最基本的对象 它负责存储当前安全上下文信息 保存着当前用户是什么 是否已经通过认证 拥有哪些权限 默认使用ThreadLocal策略来存储
  • pandas写入读取csv文件

    1 利用Pandas把列表数据写入csv文件 具体操作封装成函数 然后直接调用就行 def insert csv datas df pd DataFrame datas file name hello df to csv csv forma
  • 这么简单,还不会使用java8 stream流的map()方法吗?

    一 前言 在日常的开发工作中经常碰到要处理list中数据的问题 比如从数据库中查出了很多学生 由于一些原因需要在内存中找出这些学生中的所有姓名 或者把名为 王五 的语文成绩暂时修改为 100 这些问题怎么处理呐 之前我们想到的是遍历每个元素
  • 图片压缩

    示例
  • [Deep Learning]——MNIST数据集

    现实生活中 银行卡识别 车牌识别 快递货号识别是很常用的功能 这些都设计到手写字识别相关的内容 手写数字数据集 MNIST 数据集大小 每张大小 28 28 共7000张图片 资料链接 https pan baidu com s 1ck1U