IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习入门——03 MNIST手写数字图像集识别实验 -> 正文阅读

[人工智能]深度学习入门——03 MNIST手写数字图像集识别实验

  • MNIST是机器学习中最有名的数据集之一,由0~9的手写数字图像构成,在下面实验中利用在上一篇初识神经网络中所学习到基本框架做一个简单实验,下面代码中许多基于《深度学习入门 基于Python的理论与实现》这本书提供的代码及资料,此文仅作文个人学习笔记,如有侵权,请联系删除。
  • 下面实验主要是为了验证之前学习的神经网络的基本框架,用上述书中所提供的权重和偏置参数,对数据集中的测试图像做一个测试。
  • 1、逐张图像进行学习:
  • (1)load_mnist函数:
    normalize:是否将图像正规化为0.0-1.0的值,如果设置为False,z=则图像输入保持0~255,这是像素的取值。
    faltten:是否将输入图像展开为一维数组,否则图像为1x28x28,展开后为784。
    one_hot_label:是否将标签保存为one_hot,指的是如原本图像的标签为[1,2,3,4,5],one_hot之后只有1和0,
    经过计算后,最符合的标签为1,如识别出这个图像的数字是2,则one_hot表现为[0,1,0,0,0]这种模式。
import os
import pickle
import sys
sys.path.append(os.pardir)  #为了导入父目录中的文件进行的设定。
from dataset.mnist import load_mnist
from PIL import Image
import numpy as np
from simple_neural  import *

"""
此代码基于《深度学习入门 基于pythom的理论与实践》一书所提供的源代码编写,其中使用了该书提供的
dataset中的资料,其中load_mnist是次书中写好的代码,这里是直接调用,如有侵权,请联系删除。
"""
def get_data():
    (x_train, t_train), (x_test, t_test) = load_mnist(normalize = True, flatten = True,\
                         one_hot_label = False)
    return x_test, t_test

(2)、这里使用了pickle功能,此功能可以将程序运行中的对象保存为文件,第二次加载时可以快速复原此程序运行中的对象。下面函数调用的内容也基于上述提到的书,init_函数会快速调用之前保存simple_weight.pkl中的
内容,调取其已经学习之后所确定的比较好的权重与偏置参数。

def init_network():
    with open ("sample_weight.pkl", 'rb') as f:
        network = pickle.load(f)
    return network

def net_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

x, t = get_data()
network = init_network()
# 精确度
accuracy = 0;
for i in range(len(x)):  # [0,1,.....len(x)]
    y = net_predict(network, x[i])
    p = np.argmax(y) # 获取y中返回列表中最大值的所以,对应的就标签。如第三位对应值最大,
                     # 那么对应的标签就是数字2。
    if p == t[i]:
        accuracy += 1

print("Accuraacy: ", str(float(accuracy) / len(x)))
# Accuraacy:  0.9352  根据之前的权重参数,对测试图像进行分类,共有93.52%的图像正确归类。
  • 2、批处理进行学习:
    上述实验中我们每次处理一张图片,中间有两层隐藏层分别有50和100个神经元,我们每次读入一张图片,如果我们改成每次处理100张图片,基于数值计算的库都能够高效处理大型数组的运算,并且在神经网络的运算中当数据传送成为瓶颈时,批处理可以减小数据总线的负荷,将更多资源用于计算上。

  • 与前面相同部分:

import os
import pickle
import sys
sys.path.append(os.pardir)  #为了导入父目录中的文件进行的设定。
from dataset.mnist import load_mnist
from PIL import Image
import numpy as np
from simple_neural  import *

def get_data():
    (x_train, t_train), (x_test, t_test) = load_mnist(normalize = True, flatten = True,\
                         one_hot_label = False)
    return x_test, t_test
    
def init_network():
    with open ("sample_weight.pkl", 'rb') as f:
        network = pickle.load(f)
    return network

def net_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
  • 不同之处:

  • (1)、range函数 range(start, end, step) 从start到end-1,以step为间隔的一组数据,如range(0, 9, 2)生成[0, 2, 4, 6, 8]的序列。

  • (2)、axis是对横着方向对数据进行处理,如argmax([0.05, 0.15, 0.8],[0.3, 0.5, 0.2], [0.3, 0.1, 0.6])得到的是[2, 1, 2]。

  • (3)、最后np.sum(p == t[i:i+batch_num])是比较分类结构与实际的相等情况,p ==t[…]返回的是bool型的数据用np.sum统计True的个数。如x = [1, 2, 3, 4], y = [1, 3, 3, 4],x == y 返回[T, F,T, T]。由np.sum统计T的数据。

x, t = get_data()
network = init_network()
# 精确度
accuracy = 0;
# 批处理一批的数量
batch_num = 100
for i in range(0, len(x), batch_num):  # [0-batch_num-1, bctach_num~2*batach_num-1......]
    x_batch = x[i:i+batch_num]  #取出i到i+batcch_num内的数据,不包括i+batch_num这个值。 
    y_batch = net_predict(network, x_batch)
    p = np.argmax(y_batch, axis=1) 
    accuracy += np.sum(p == t[i:i+batch_num])

print("Accuraacy: ", str(float(accuracy) / len(x)))
# Accuraacy:  0.9352  根据之前的权重参数,对测试图像进行分类,共有93.52%的图像正确归类。
  • 此文中用到上述书所提供的函数,如Load_mnist函数,在下篇的博客中再具体分析是如何构造的。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:03:28  更:2022-01-16 13:04:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:03:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码