• 大小: 25KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: Python
  • 标签: python  源码  

资源简介

用于手写字体识别的卷积神经网络源码,python语言,包含注释

资源截图

代码片段和文件信息

#coding:utf-8
import numpy as np
import os
import gzip
import urllib.request
import struct
import matplotlib.pyplot as plt
import sys
import pickle
filefolder = r‘C:\Users\子坤\Desktop\machinelearning learning‘
filename_list = (r‘\train-images-idx3-ubyte.gz‘
            r‘\train-labels-idx1-ubyte.gz‘
            r‘\t10k-images-idx3-ubyte.gz‘
            r‘\t10k-labels-idx1-ubyte.gz‘)
file_net_name = r‘\net.pkl‘
def storeNet(filename net):
    fw = open(filename‘wb‘)
    pickle.dump(net fw)
    fw.close()
def grabNet(filename):
    fr = open(filename‘rb‘)
    net = pickle.load(fr)
    fr.close()
    return net
def load_dataset(pathfile_train_image file_train_label file_test_image file_test_label):
    “““
    函数功能:读取mnist数据集,并返回4个np数组
    path:手写数字数据集路径名
    file_train_image:训练集image压缩包文件名
    file_train_label:训练集label压缩包文件名
    file_test_image:测试集image压缩包文件名
    file_test_label:测试集label压缩包文件名
    “““
    train_imgs = load_imageset(path + file_train_image)
    train_lbls = load_labelset(path + file_train_label)
    test_imgs = load_imageset(path + file_test_image)
    test_lbls = load_labelset(path + file_test_label)
    return train_imgs train_lbls test_imgs test_lbls
def load_imageset(filename):
    “““
    函数功能:读取mnist数据的中的images压缩包到np数组中并返回
    函数工作原理解释:该二进制文件的内容以“位”为单位,前16个字节是4个整形数组,每个数字(分别是魔数、图
    片数、图片横轴像素数、图片纵轴像素数)占4个字节,接下来每个字节代表一个像素值。
    filename:待读取文件绝对路径
    “““
    with gzip.open(filename ‘rb‘) as binfile:
        buffers = binfile.read()
    binfile.close()
    head = struct.unpack_from(‘>IIII‘ buffers 0) # 取前4个整数,返回一个元组
    offset = struct.calcsize(‘>IIII‘)  # 定位到data开始的位置
    imgNum width height = head[1] head[2] head[3]
    bits = imgNum * width * height  # data一共有60000*28*28个像素值
    bitsString = ‘>‘ + str(bits) + ‘B‘  # fmt格式:‘>47040000B‘
    imgs = struct.unpack_from(bitsString buffers offset) # 取data数据,返回一个元组
    imgs = np.reshape(imgs [imgNum 1 width height]) # reshape为[60000784]型数组
    print(imgs.shape)
    return imgs

def load_labelset(filename):
    “““
    函数功能:读取mnist数据的中的label压缩包到np数组中并返回
    函数工作原理解释:该二进制文件的内容以“位”为单位,前8个字节是2个整形数组,每个数字(分别是魔数、
    laebl数)占4个字节,接下来每个字节代表一个label值。
    filename:待读取文件绝对路径
    “““
    with gzip.open(filename ‘rb‘) as binfile:
        buffers = binfile.read()
    binfile.close()
    head = struct.unpack_from(‘>II‘ buffers 0) # 取前2个整数,返回一个元组
    offset = struct.calcsize(‘>II‘)  # 定位到label数据开始的位置
    lblNum = head[1] # data一共有60000个像素值
    bitsString = ‘>‘ + str(lblNum) + ‘B‘  # fmt格式:‘>600000B‘
    lbls = struct.unpack_from(bitsString buffers offset) # 取label数据,返回一个元组
    lbls = np.reshape(lbls [lblNum]) # reshape为[60000]型列表
    print(lbls.shape)
    return lbls
def conv(inputdata kernel):
    “““
    计算两个np.adarray矩阵的卷积
    “““
    in_row in_column = inputdata.shape
    kernel_width kernel_height = kernel.shape
    re_row re_clunm = in_row - kernel_width + 1 in_column - kerne

评论

共有 条评论