學習人工智慧少不了需要一些資料集,例如進行鑑黃的人工智慧少不了一些類似的圖片。進行語音辨識的人工智慧,語料庫是少不了的。對於初學人工智慧的同學常常會為資料集而煩惱。今天我們就介紹一個很簡單,但很有用的資料集,這就是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中文網其他相關文章!

在約翰·羅爾斯1971年具有開創性的著作《正義論》中,他提出了一種思想實驗,我們應該將其作為當今人工智能設計和使用決策的核心:無知的面紗。這一理念為理解公平提供了一個簡單的工具,也為領導者如何利用這種理解來公平地設計和實施人工智能提供了一個藍圖。 設想一下,您正在為一個新的社會制定規則。但有一個前提:您事先不知道自己在這個社會中將扮演什麼角色。您最終可能富有或貧窮,健康或殘疾,屬於多數派或邊緣少數群體。在這種“無知的面紗”下運作,可以防止規則制定者做出有利於自身的決策。相反,人們會更有動力製定公

許多公司專門從事機器人流程自動化(RPA),提供機器人以使重複的任務自動化 - UIPATH,在任何地方自動化,藍色棱鏡等。 同時,過程採礦,編排和智能文檔處理專業

AI的未來超越了簡單的單詞預測和對話模擬。 AI代理人正在出現,能夠獨立行動和任務完成。 這種轉變已經在諸如Anthropic的Claude之類的工具中很明顯。 AI代理:研究

快速的技術進步需要對工作未來的前瞻性觀點。 當AI超越生產力並開始塑造我們的社會結構時,會發生什麼? Topher McDougal即將出版的書Gaia Wakes:

產品分類通常涉及復雜的代碼,例如諸如統一系統(HS)等系統的“ HS 8471.30”,對於國際貿易和國內銷售至關重要。 這些代碼確保正確的稅收申請,影響每個INV

數據中心能源消耗與氣候科技投資的未來 本文探討了人工智能驅動的數據中心能源消耗激增及其對氣候變化的影響,並分析了應對這一挑戰的創新解決方案和政策建議。 能源需求的挑戰: 大型超大規模數據中心耗電量巨大,堪比數十萬個普通北美家庭的總和,而新興的AI超大規模中心耗電量更是數十倍於此。 2024年前八個月,微軟、Meta、谷歌和亞馬遜在AI數據中心建設和運營方面的投資已達約1250億美元(摩根大通,2024)(表1)。 不斷增長的能源需求既是挑戰也是機遇。據Canary Media報導,迫在眉睫的電

生成式AI正在徹底改變影視製作。 Luma的Ray 2模型,以及Runway的Gen-4、OpenAI的Sora、Google的Veo等眾多新模型,正在以前所未有的速度提升生成視頻的質量。這些模型能夠輕鬆製作出複雜的特效和逼真的場景,甚至連短視頻剪輯和具有攝像機感知的運動效果也已實現。雖然這些工具的操控性和一致性仍有待提高,但其進步速度令人驚嘆。 生成式視頻正在成為一種獨立的媒介形式。一些模型擅長動畫製作,另一些則擅長真人影像。值得注意的是,Adobe的Firefly和Moonvalley的Ma

ChatGPT用户体验下降:是模型退化还是用户期望? 近期,大量ChatGPT付费用户抱怨其性能下降,引发广泛关注。 用户报告称模型响应速度变慢,答案更简短、缺乏帮助,甚至出现更多幻觉。一些用户在社交媒体上表达了不满,指出ChatGPT变得“过于讨好”,倾向于验证用户观点而非提供批判性反馈。 这不仅影响用户体验,也给企业客户带来实际损失,例如生产力下降和计算资源浪费。 性能下降的证据 许多用户报告了ChatGPT性能的显著退化,尤其是在GPT-4(即将于本月底停止服务)等旧版模型中。 这


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器