利用python对mnist数据集中的0,1手写字体进行二分类

本文介绍了使用Python解析MNIST数据集并进行0,1手写数字二分类的过程,包括下载数据、解析 idx 文件、特征提取、逻辑回归模型训练和测试,最终模型准确率达到0.998582。" 44923279,1418187,使用指南:搭建与配置live555流媒体服务器,"['流媒体', '开源项目', 'C++', 'Windows开发', '多媒体']
摘要由CSDN通过智能技术生成

1. 下载代码,通过点击链接(http://yann.lecun.com/exdb/mnist/),打开页面如下图所示,下载对应MNIST手写数字识别数据集,包括训练集图像、训练集标签、测试集图像与测试集标签四个部分。下载保存于指定位置。

 

2.分析数据集,进行预处理,由于所提供的数据集格式为.idx3_ubyte。不方便直接进行训练,因此,如要将其转化为图片格式,通过直接读取图片像素作为训练特征。数据集预处理的程序代码为(程序文件名: analysisdataset.py):

import numpy as np

import struct

import matplotlib.pyplot as plt

 

# 训练集文件

train_images_idx3_ubyte_file = 'user/mnist/train-images.idx3-ubyte'

# 训练集标签文件

train_labels_idx1_ubyte_file = 'user/mnist/train-labels.idx1-ubyte'

 

# 测试集文件

test_images_idx3_ubyte_file = 'user /mnist/t10k-images.idx3-ubyte'

# 测试集标签文件

test_labels_idx1_ubyte_file = 'user/mnist/t10k-labels.idx1-ubyte'

 

 

def decode_idx3_ubyte(idx3_ubyte_file):

    """

    解析idx3文件的通用函数

    :param idx3_ubyte_file: idx3文件路径

    :return: 数据集

    """

    # 读取二进制数据

    bin_data = open(idx3_ubyte_file, 'rb').read()

 

    # 解析文件头信息,依次为魔数、图片数量、每张图片高、每张图片宽

    offset = 0

    fmt_header = '>iiii'

    magic_number, num_images, num_rows, num_cols = struct.unpack_from(fmt_header, bin_data, offset)

    print('魔数:%d, 图片数量: %d张, 图片大小: %d*%d' % (magic_number, num_images, num_rows, num_cols))

 

    # 解析数据集

    image_size = num_rows * num_cols

    offset += struct.calcsize(fmt_header)

    fmt_image = '>' + str(image_size) + 'B'

    images = np.empty((num_images, num_rows, num_cols))

    for i in range(num_images):

        if (i + 1) % 10000 == 0:

            print('已解析 %d' % (i + 1) + '张')

        images[i] = np.array(struct.unpack_from(fmt_image, bin_data, offset)).reshape((num_rows, num_cols))

        offset += struct.calcsize(fmt_image)

    return images

 

 

def decode_idx1_ubyte(idx1_ubyte_file):

    """

    解析idx1文件的通用函数

    :param idx1_ubyte_file: idx1文件路径

    :return: 数据集

    """

    # 读取二进制数据

    bin_data = open(idx1_ubyte_file, 'rb').read()

 

    # 解析文件头信息,依次为魔数和标签数

    offset = 0

    fmt_header = '>ii'

    magic_number, num_images = struct.unpack_from(fmt_header, bin_data, offset)

    print('魔数:%d, 图片数量: %d张' % (magic_number, num_images))

 

    # 解析数据集

    offset += struct.calcsize(fmt_

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值