Numpy格式化的Mnist数据集及加载方法

需积分: 12 1 下载量 71 浏览量 更新于2024-11-19 收藏 20.67MB ZIP 举报
资源摘要信息:"Mnist数据集是机器学习和计算机视觉领域广泛使用的一个数据集,主要包含手写数字的灰度图像。本资源提供了一个以numpy格式存储的Mnist数据集,方便用户直接加载到numpy数组中进行数据分析或机器学习模型的训练。数据集经过格式化处理后,被存储在一个名为'mnist.npz'的压缩文件中,该文件包含了六个部分,分别是训练图像、训练标签、测试图像、测试标签、验证图像和验证标签。每个图像文件以784x1的数组形式存储,每个标签文件以10x1的数组形式存储,其中标签使用了一次热编码的方式进行表示。用户可以通过导入numpy库并使用特定的函数来加载这些数据。" 知识点详细说明: 1. Mnist数据集介绍: Mnist数据集是一个包含了0到9的手写数字的大型数据库,广泛用于训练和测试机器学习模型,特别是在手写识别方面。每个图像以28x28像素的灰度图表示,每个像素值是一个介于0到255之间的整数,表示该像素点的亮度。 2. numpy格式: numpy是一个功能强大的Python库,用于对大型多维数组进行高效的数学运算。numpy格式通常指的是使用numpy库创建的数组文件格式,该格式可以有效地存储和读取大型数据集。在本资源中,数据被存储为.npz文件格式,这是一种通过numpy的savez或savez_compressed函数保存多个numpy数组的文件格式。 3. 一次热编码(One-hot Encoding): 在机器学习中,分类标签通常需要转换为一种适合算法处理的格式。一次热编码是一种编码方式,用于将标签数据转换为二进制形式。每个类别对应一个独特的位(bit),在该位置为1,其余位置为0。例如,在本资源中,10个类别(0到9的数字)被编码为一个长度为10的数组,其中对应数字的位置为1,其他位置为0。 4. 加载Mnist数据集: 资源提供了一个方便加载Mnist数据集的方法。首先需要安装numpy库,然后可以通过python脚本加载'mnist.npz'文件。加载过程中需要使用with语句来处理文件上下文,确保文件在读取后被正确关闭。加载后的数据被分别存储在六个变量中,分别是训练图像、训练标签、测试图像、测试标签、验证图像和验证标签,这些变量都是numpy数组,可以直接用于机器学习模型的训练和评估。 5. 数据集的使用场景: Mnist数据集不仅适用于手写数字识别,还可用于图像处理、模式识别、深度学习等领域的研究。通过该数据集,研究者可以探索不同的算法,如卷积神经网络(CNN)、支持向量机(SVM)、决策树和集成学习等,来解决分类问题。 6. 数据集的格式化: 在本资源中,Mnist数据集被转化为numpy格式,使得数据可以直接作为numpy数组处理。这为研究者提供了一种快速便捷的数据读取方式,无需从原始的图像文件中提取数据。此外,数据集的格式化处理还包括了图像的归一化和标签的一次热编码,这些处理方式提高了数据处理的效率和模型训练的性能。 7. 数据集的文件结构: 资源中的'mnist.npz'文件结构清晰,包含六个部分,每部分对应数据集的一个子集,分别是训练集、测试集和验证集的图像和标签。这种划分使得用户在进行模型训练时可以更好地进行数据集分割,实现更准确的性能评估。 总结,该Mnist数据集资源为研究者和开发人员提供了一种简单、快速且高效的数据加载方式,极大地促进了机器学习和人工智能领域的发展。通过numpy格式和一次热编码的优化处理,该数据集非常适合用于开发和训练图像识别和分类模型。
2023-05-10 上传

import cv2 import numpy as np import tensorflow as tf # 加载之前训练好的模型 model = tf.keras.models.load_model('mnist_cnn_model') for img in images_data: # 将RGB格式转换为BGR格式 img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 转换为灰度图像 gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) # 二值化处理 _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # 找到轮廓 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 初始化计数器 count = 0 # 遍历所有轮廓 for contour in contours: # 计算轮廓面积 area = cv2.contourArea(contour) if area < 200 or area > 2000: # 如果轮廓面积小于10个像素,则忽略该轮廓 continue # 获取轮廓的外接矩形 x, y, w, h = cv2.boundingRect(contour) # 在原始图像上标记出抠出来的数字部分,并将BGR格式转换为RGB格式 cv2.rectangle(img_bgr, (x, y), (x+w, y+h), (0, 255, 0), 2) digit = cv2.cvtColor(img_bgr[y:y+h, x:x+w], cv2.COLOR_BGR2RGB) # 对数字图像进行预处理,使其与训练数据具有相同的格式 digit_resized = cv2.resize(digit, (28, 28)) digit_gray = cv2.cvtColor(digit_resized, cv2.COLOR_RGB2GRAY) digit_normalized = digit_gray / 255.0 digit_reshaped = np.reshape(digit_normalized, (1, 28, 28)) # 进行预测并输出最大概率对应的数字 prediction = model.predict(digit_reshaped) digit_class = np.argmax(prediction) print("抠出来的数字是:", digit_class) # 增加计数器 count += 1 # 在原始图像上显示标记过的抠出来的数字部分 #plt.figure(figsize=(20, 20)) #plt.imshow(cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)) #plt.show() # 显示抠出来的数字个数 print("抠出来了{}个数字".format(count)) 如何解决error Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_12928/408549256.py in <module> 8 for img in images_data: 9 # 将RGB格式转换为BGR格式 ---> 10 img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) 11 12 # 转换为灰度图像 error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'cvtColor' > Overload resolution failed: > - src is not a numpy array, neither a scalar > - Expected Ptrcv::UMat for argument 'src'这个错误

2023-06-07 上传
2023-07-04 上传