想学习人工智能,这个的数据集必须掌握,MNIST入门与实战
学习人工智能少不了需要一些数据集,比如进行鉴黄的人工智能少不了一些类似的图片。进行语音识别的人工智能,语料库是少不了的。对于初学人工智能的同学常常为数据集而发愁。今天我们就介绍一个非常简单,但很有用的数据集,这就是MNIST。这个数据集非常适合我们进行人工智能相关算法的学习和练习。
MNIST 数据集是美国国家标准与技术研究所(National Institute of Standards and Technology,简称NIST)制作的一个非常简单的数据集。那么该数据集是什么内容呢?其实就是一些手写的阿拉伯数字(0到9十个数字)。
NIST在制作数据集的时候还是很认真的。数据集中的训练集 (training set) 由来自 250 个不同人手写的数字构成,其中 50%是高中学生,50% 来自人口普查局 (the Census Bureau) 的工作人员。测试集(test set) 也是同样比例的手写数字数据。
如何下载MNIST数据集
MNIST数据集可从其官网(http://yann.lecun.com/exdb/mnist/ )下载,由于是国外网站,下载可能比较慢。它包含了四个部分:
- 训练集图片:train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
- 训练集标签:train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
- 测试集图片:t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
- 测试集标签:t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)
上述包含两种类型的内容,一种是图片,另外一种是标签,图片与标签一一对应。但是这里的图片并非是我们平时看到的图片文件,而是一个二进制的文件。该数据集以一个二进制的形式对6万个图片进行了存储。标签则是图片对应的真是数字。
如下图所示,本文将数据集下载到本地,并且解压后的结果。为了便于对比,这里面包含原始的压缩包和解压后的文件。
数据集的格式简析
大家已经发现,压缩包解压后并非一个个的图片,而是每个压缩包对应着一个独立的问题。而在这个文件中存储着上万个图片或者标签的信息。那么这些信息是如何存储在这个文件当中的呢?
其实MNIST的官网给出了详细的描述。以训练集的图片文件为例,官网给出的文件格式描述如下:
从上图可以看出,前4个32位数是该训练集的描述信息。其中第一个是魔数,为固定值0x0803;第二个是图片的数量,0xea60,也就是60000;第三个和第四个是图片的大小,也就是图片是28*28像素。下面则是以一个字节来描述每个像素。由于该文件中以一个字节来描述一个像素,可以知道像素的值可以是从0到255。其中0表示白色,而255表示黑色。
标签文件的格式与图片文件的类似。前面有两个32位数,其中第一个是魔数,固定值0x0801;第二个用于描述标签的数量。接下来的数据是每个标签的值,用一个字节表示。这里表示值的范围是
对应实际训练集的标签文件的数据如下所示。可以看出与上述格式的描述是一致的。另外,我们可以看出,对应该标签集,前面几张图片表示的数字分别应该是5,0,4,1等等。这里大家记一下,后面会用到。
关于数据集的文件格式我们了解了,下面我们实际操作一下。
数据集的可视化处理
知道上述数据的存储格式后,我们就可以对数据进行解析了。比如下面本文实现了一个小程序,用于解析该图片集合中的某个图片,并得到可视化结果。当然,其实我们可以根据标签集合的值知道图片是什么,这里只是一个实验。最终结果是以一个文本文件存储的,用字符“Y”表示笔迹,字符“0”表示背景色。具体程序代码很简单,本文不再赘述。
# -*- coding: UTF-8 -*- def trans_to_txt(train_file, txt_file, index): with open(train_file, 'rb') as sf: with open(txt_file, "w") as wf: offset = 16 + (28*28*index) cur_pos = offset count = 28*28 strlen = 1 out_count = 1 while cur_pos < offset+count: sf.seek(cur_pos) data = sf.read(strlen) res = int(data[0]) #虽然在数据集中像素是1-255表示颜色,这里简化为Y if res > 0 : wf.write(" Y ") else: wf.write(" 0 ") #由于图片是28列,因此在此进行换行 if out_count % 28 == 0 : wf.write("n") cur_pos += strlen out_count += 1 trans_to_txt("../data/train-images.idx3-ubyte", "image.txt", 0)
我们运行上述代码,可以得到一个名为image.txt的文件。可以看到该文件的内容如下。其中红色笔记是后面添加了,主要是为看的清楚一些。从图中内容可以看出,这个其实就是手写的“5”。
前面我们通过原生的Python接口对数据集进行了可视化的解析。Python有很多已经实现好的库函数,因此我们可以通过一个库函数简化上述功能。
基于第三方库解析数据
采用原生的Python接口实现起来略显复杂。我们知道Python有很多第三方库,因此我们可以借助第三方库来实现对数据集的解析和展示,具体代码如下。
# -*- coding: utf-8 -*- import os import struct import numpy as np # 读取数据集,以二维数组的方式返回图片信息和标签信息 def load_mnist(path, kind='train'): # 从指定目录加载数据集 labels_path = os.path.join(path, '%s-labels.idx1-ubyte' % kind) images_path = os.path.join(path, '%s-images.idx3-ubyte' % kind) with open(labels_path, 'rb') as lbpath: magic, n = struct.unpack('>II', lbpath.read(8)) labels = np.fromfile(lbpath, dtype=np.uint8) with open(images_path, 'rb') as imgpath: #解析图片信息,存储在images中 magic, num, rows, cols = struct.unpack('>IIII', imgpath.read(16)) images = np.fromfile(imgpath, dtype=np.uint8).reshape(len(labels), 784) return images, labels # 在终端打印某个图片的数据信息 def print_image(data, index): idx = 0; count = 0; for item in data[index]: if count % 28 == 0: print("") if item > 0: print("33[7;31mY 33[0m", end="") else: print("0 ", end="") count += 1 def main(): cur_path = os.getcwd() cur_path = os.path.join(cur_path, "..data") imgs, labels = load_mnist(cur_path) print_image(imgs, 0) if __name__ == "__main__": main()
上述代码中分为两步,第一步是将数据集解析到数组中,第二步是对数组中的某个图片进行显示。这里显示也是通过文本的方式程序,只不过不是存储在文件中,而是打印在终端。比如我们依然打印第一个图片,其效果如下:
上述结果的呈现只是通过字符来模拟图片。其实我们可以借助第三方库实现更加完美的图片呈现。接下来我们介绍一下如何通过matplotlib库来呈现图片。这个库非常有用,后续还会接触到这个库。
我们实现一个
def show_image(data, index): fig, ax = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True, ) img = data[0].reshape(28, 28) ax.imshow(img, cmap='Greys', interpolation='nearest') ax.set_xticks([]) ax.set_yticks([]) plt.tight_layout() plt.show()
此时可以看到
实现上述功能的时候可能会缺少一些第三方库,比如matplotlib等。此时需要我们手动进行安装,具体方法如下:
pip install matplotlib -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
基于TensorFlow的数据解析
MNIST是如此出名,以至于TensorFlow已经对其进行了支持。因此,我们可以通过TensorFlow对其进行加载和解析。下面我们给出用TensorFlow实现的代码。
# -*- coding: utf-8 -*- from tensorflow.examples.tutorials.mnist import input_data import pylab def show_mnist(): # 通过TensorFlow库解析数据 mnist = input_data.read_data_sets("../data", one_hot=True) im = mnist.train.images[0] im = im.reshape(28 ,28) # 进行绘图 pylab.imshow(im, cmap='Greys', interpolation='nearest') pylab.show() if __name__ == "__main__": show_mnist()
该代码实现的最终效果与上一个实例一致,这里不再赘述。
以上是想学习人工智能,这个的数据集必须掌握,MNIST入门与实战的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本站6月27日消息,剪映是由字节跳动旗下脸萌科技开发的一款视频剪辑软件,依托于抖音平台且基本面向该平台用户制作短视频内容,并兼容iOS、安卓、Windows、MacOS等操作系统。剪映官方宣布会员体系升级,推出全新SVIP,包含多种AI黑科技,例如智能翻译、智能划重点、智能包装、数字人合成等。价格方面,剪映SVIP月费79元,年费599元(本站注:折合每月49.9元),连续包月则为59元每月,连续包年为499元每年(折合每月41.6元)。此外,剪映官方还表示,为提升用户体验,向已订阅了原版VIP

通过将检索增强生成和语义记忆纳入AI编码助手,提升开发人员的生产力、效率和准确性。译自EnhancingAICodingAssistantswithContextUsingRAGandSEM-RAG,作者JanakiramMSV。虽然基本AI编程助手自然有帮助,但由于依赖对软件语言和编写软件最常见模式的总体理解,因此常常无法提供最相关和正确的代码建议。这些编码助手生成的代码适合解决他们负责解决的问题,但通常不符合各个团队的编码标准、惯例和风格。这通常会导致需要修改或完善其建议,以便将代码接受到应

想了解更多AIGC的内容,请访问:51CTOAI.x社区https://www.51cto.com/aigc/译者|晶颜审校|重楼不同于互联网上随处可见的传统问题库,这些问题需要跳出常规思维。大语言模型(LLM)在数据科学、生成式人工智能(GenAI)和人工智能领域越来越重要。这些复杂的算法提升了人类的技能,并在诸多行业中推动了效率和创新性的提升,成为企业保持竞争力的关键。LLM的应用范围非常广泛,它可以用于自然语言处理、文本生成、语音识别和推荐系统等领域。通过学习大量的数据,LLM能够生成文本

大型语言模型(LLM)是在巨大的文本数据库上训练的,在那里它们获得了大量的实际知识。这些知识嵌入到它们的参数中,然后可以在需要时使用。这些模型的知识在训练结束时被“具体化”。在预训练结束时,模型实际上停止学习。对模型进行对齐或进行指令调优,让模型学习如何充分利用这些知识,以及如何更自然地响应用户的问题。但是有时模型知识是不够的,尽管模型可以通过RAG访问外部内容,但通过微调使用模型适应新的领域被认为是有益的。这种微调是使用人工标注者或其他llm创建的输入进行的,模型会遇到额外的实际知识并将其整合

编辑|ScienceAI问答(QA)数据集在推动自然语言处理(NLP)研究发挥着至关重要的作用。高质量QA数据集不仅可以用于微调模型,也可以有效评估大语言模型(LLM)的能力,尤其是针对科学知识的理解和推理能力。尽管当前已有许多科学QA数据集,涵盖了医学、化学、生物等领域,但这些数据集仍存在一些不足。其一,数据形式较为单一,大多数为多项选择题(multiple-choicequestions),它们易于进行评估,但限制了模型的答案选择范围,无法充分测试模型的科学问题解答能力。相比之下,开放式问答

机器学习是人工智能的重要分支,它赋予计算机从数据中学习的能力,并能够在无需明确编程的情况下改进自身能力。机器学习在各个领域都有着广泛的应用,从图像识别和自然语言处理到推荐系统和欺诈检测,它正在改变我们的生活方式。机器学习领域存在着多种不同的方法和理论,其中最具影响力的五种方法被称为“机器学习五大派”。这五大派分别为符号派、联结派、进化派、贝叶斯派和类推学派。1.符号学派符号学(Symbolism),又称为符号主义,强调利用符号进行逻辑推理和表达知识。该学派认为学习是一种逆向演绎的过程,通过已有的

编辑|KX在药物研发领域,准确有效地预测蛋白质与配体的结合亲和力对于药物筛选和优化至关重要。然而,目前的研究没有考虑到分子表面信息在蛋白质-配体相互作用中的重要作用。基于此,来自厦门大学的研究人员提出了一种新颖的多模态特征提取(MFE)框架,该框架首次结合了蛋白质表面、3D结构和序列的信息,并使用交叉注意机制进行不同模态之间的特征对齐。实验结果表明,该方法在预测蛋白质-配体结合亲和力方面取得了最先进的性能。此外,消融研究证明了该框架内蛋白质表面信息和多模态特征对齐的有效性和必要性。相关研究以「S

本站7月5日消息,格芯(GlobalFoundries)于今年7月1日发布新闻稿,宣布收购泰戈尔科技(TagoreTechnology)的功率氮化镓(GaN)技术及知识产权组合,希望在汽车、物联网和人工智能数据中心应用领域探索更高的效率和更好的性能。随着生成式人工智能(GenerativeAI)等技术在数字世界的不断发展,氮化镓(GaN)已成为可持续高效电源管理(尤其是在数据中心)的关键解决方案。本站援引官方公告内容,在本次收购过程中,泰戈尔科技公司工程师团队将加入格芯,进一步开发氮化镓技术。G
