python神经网络案例——CNN卷积神经网络实现mnist手写体识别

转自:https://blog.csdn.net/luanpeng825485697/article/details/79088938

全栈工程师开发手册 (作者:栾鹏)

python教程全解

CNN卷积神经网络的理论教程参考 
http://blog.csdn.net/luanpeng825485697/article/details/79009241


我们实现一个MNIST.py文件,专门用来读取手写体文件中的数据。

我们尝试运行一下。读取第0-28个样本的内容。

可以看到打印输出样式类似如下。


import numpy as np  #注意python和numpy版本的对应,如果不对应提示出错。

class Loader(object):

    def __init__(self, path, count):
        self.path = path
        self.count = count

    def get_file_content(self):
        print(self.path)
        f = open(self.path, 'rb')
        content = f.read()
        f.close()
        return content
    # def to_int(self, byte):
    #     return struct.unpack('B', byte)[0]

class ImageLoader(Loader):

    def get_picture(self, content, index):
        start = index * 28 * 28 + 16
        picture = []
        for i in range(28):
            picture.append([])
            for j in range(28):
                byte1 = content[start + i * 28 + j]
                picture[i].append(byte1)
        return picture

    def get_one_sample(self, picture):
        sample = []
        for i in range(28):
            for j in range(28):
                sample.append(picture[i][j])
        return sample

    def load(self,onerow=False):
        content = self.get_file_content()
        data_set = []
        for index in range(self.count):
            onepic =self.get_picture(content, index)
            if onerow: onepic = self.get_one_sample(onepic)
            data_set.append(onepic)
        return data_set

class LabelLoader(Loader):

    def load(self):
        content = self.get_file_content()
        labels = []
        for index in range(self.count):
            onelabel = content[index + 8]
            onelabelvec = self.norm(onelabel)
            labels.append(onelabelvec)
        return labels

    def norm(self, label):
        label_vec = []
        # label_value = self.to_int(label)
        label_value = label
        for i in range(10):
            if i == label_value:
                label_vec.append(1)
            else:
                label_vec.append(0)
        return label_vec

def get_training_data_set(num,onerow=False):
    image_loader = ImageLoader('/home/gis/PycharmProjects/cnn/MNIST_data/train-images.idx3-ubyte', num)
    label_loader = LabelLoader('/home/gis/PycharmProjects/cnn/MNIST_data/train-labels.idx1-ubyte', num)
    return image_loader.load(onerow), label_loader.load()

def get_test_data_set(num,onerow=False):
    image_loader = ImageLoader('/home/gis/PycharmProjects/cnn/MNIST_data/t10k-images.idx3-ubyte', num)
    label_loader = LabelLoader('/home/gis/PycharmProjects/cnn/MNIST_data/t10k-labels.idx1-ubyte', num)
    return image_loader.load(onerow), label_loader.load()

def printimg(onepic):
    onepic=onepic.reshape(28,28)
    for i in range(28):
        for j in range(28):
            if onepic[i, j] == 0:
                print('   ', end='')  # python3支持这种格式,如果是python2不支持print这种格式
            else:  # print "* "
                print('* ', end='')  # python3geshi
        print('')


if __name__=="__main__":
    train_data_set, train_labels = get_training_data_set(100)
    train_data_set = np.array(train_data_set)
    train_labels = np.array(train_labels)
    for i in range(28): #实现输出前28个手写体数字。

        onepic = train_data_set[i]
        printimg(onepic)
        print(train_labels[i].argmax())

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip实验CNN数字手写体识别基于python jupyter notebook android (可运行)可安装在手机.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值