手写数字数据集——MINST的读取及预处理

MNIST是一个手写数字集合,每张图片分辨率为28x28,像素点数值取值范围0~255。mnist.pkl文件的内容info是一个元组,包括训练集、验证集、测试集,它没有直接使用原始图像,而是将其转换成向量的形式它已经把手写识别的图片(28*28)转化成了一个向量(1,784),向量中的每一维分别代表原始图像中对应像素点的灰度值然后给出了这个图片的标识0-9。

首先要打开pkl文件,需要用到py包_pickle,这里的open要用rb,因为是要以二进制的方式读取文件。(我这里的pkl文件还是个压缩包,所以使用gzip打开)

import _pickle as cPickle
import gzip

f = gzip.open("MNIST\mnist.pkl.gz",'rb')
training_data, validation_data, test_data = cPickle.load(f, encoding='bytes')

 可以到训练集、验证集、测试集分别有50000,10000,10000张

  其中训练集分为两部分,第一维存储的是图像对应的50000个1*784的向量,第二维存储的50000个是图像对应的数字标签。

 读取训练集的第一张图片看看

 数据的预处理

将图像从行向量(1*784)转换成列向量(784*1),并将图像对应的数字也转换成numpy类型的列向量(10*1),数字对应的索引置1,其余位置则为0。

training_inputs = [np.reshape(x, (784, 1)) for x in training_data[0]]
training_results = [vectorized_result(y) for y in training_data[1]]
training_data = list(zip(training_inputs, training_results))

validation_inputs = [np.reshape(x, (784, 1)) for x in validation_data[0]]
validation_data = list(zip(validation_inputs, validation_data[1]))

test_inputs = [np.reshape(x, (784, 1)) for x in test_data[0]]
test_data = list(zip(test_inputs, test_data[1]))
def vectorized_result(j):
    e = np.zeros((10, 1))
    e[j] = 1.0
    return e

完整代码:

import matplotlib.pyplot as plt
import numpy as np
import _pickle as cPickle
import gzip


def vectorized_result(j):
    e = np.zeros((10, 1))
    e[j] = 1.0
    return e

f = gzip.open("MNIST\mnist.pkl.gz",'rb')
training_data, validation_data, test_data = cPickle.load(f, encoding='bytes')

#print(type(training_data[0])) #50000张784*1的图像
#print(training_data[0][0].shape)
#print(type(training_data[1])) #50000个数字标签


training_inputs = [np.reshape(x, (784, 1)) for x in training_data[0]]
training_results = [vectorized_result(y) for y in training_data[1]]
training_data = list(zip(training_inputs, training_results))

validation_inputs = [np.reshape(x, (784, 1)) for x in validation_data[0]]
validation_data = list(zip(validation_inputs, validation_data[1]))

test_inputs = [np.reshape(x, (784, 1)) for x in test_data[0]]
test_data = list(zip(test_inputs, test_data[1]))
#print(len(training_data))
#print(training_data)


img = training_inputs[0]
img = img.reshape(28,-1)
print(type(img))
plt.imshow(img)
plt.show()

使用 plt.imshow() 方法进行画图,它将灰度图像按照灰度值的高低映射成彩色图像。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
逻辑回归是一种用于解决二分类问题的机器学习算法。在本实验中,我们使用逻辑回归算法来识别MINST(MNIST手写数字数据集中的手写数字。 MNIST手写数字数据集是一个经典的机器学习数据集,其中包含了一系列由手写数字图片组成的训练样本。每张图片都是28x28像素大小,灰度图像,被标记为0到9之间的数字。 在实验中,我们首先需要加载MNIST数据集,并对数据进行预处理预处理包括将每张图片转换为一维向量、标准化像素值以及划分训练数据集和测试数据集。 接下来,我们将使用逻辑回归算法来训练模型。在训练阶段,我们将使用训练数据集来调整模型的权重参数,以便能够将输入图片正确分类为0到9的数字之一。训练过程中,逻辑回归算法将通过优化损失函数来最小化预测结果与真实标签之间的差异。 训练完成后,我们将使用测试数据集来评估模型的性能。通过将测试样本输入模型并将预测结果与真实标签进行比较,可以计算出模型的准确度、精确度、召回率等指标,以评估逻辑回归算法在MINST手写数字数据集上的识别能力。 在实验中,我们可以调整逻辑回归算法的超参数(如学习率、正则化项)来优化模型性能。另外,我们还可以使用特征工程来提取更有信息量的特征,从而提高模型的性能。 总而言之,通过使用逻辑回归算法识别MINST手写数据集,我们可以实现对手写数字的自动识别,并对模型的准确度进行评估和优化。这个实验不仅可以帮助我们理解逻辑回归算法的原理和应用,还可以为实际的手写数字识别问题提供有用的参考和指导。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值