MNIST 數據集 ubyte 格式介紹

train-images-idx1-ubyte 文件是用于存儲 MNIST 數據集中手寫數字圖像數據的文件。與標簽文件類似,這個文件使用的是一種簡單而緊湊的二進制格式。具體的文件格式如下:

  1. 文件頭(Header)
    文件頭部分包含了一些描述文件內容的信息,具體如下:

    • 魔數(Magic Number):文件的前 4 個字節,用于標識文件類型。對于圖像文件,魔數通常是 2051(十進制)。
    • 圖像數量:緊隨魔數之后的 4 個字節,表示文件中包含的圖像數量。
    • 圖像高度:再接下來的 4 個字節,表示圖像的高度(像素)。
    • 圖像寬度:緊隨圖像高度之后的 4 個字節,表示圖像的寬度(像素)。
  2. 圖像數據
    圖像數據部分緊隨文件頭之后,包含了所有圖像的像素數據,每個像素占用 1 個字節(0 到 255 之間的灰度值)。

具體來說,文件的格式可以用偽代碼表示如下:

[header]
| magic number (4 bytes) | number of images (4 bytes) | number of rows (4 bytes) | number of columns (4 bytes) |
[images]
| pixel 1 (1 byte) | pixel 2 (1 byte) | ... | pixel N (1 byte) |

其中,每個圖像的數據按行優先順序存儲(即每行的像素從左到右排列,按行排列)。

讀取 train-images-idx1-ubyte 文件的示例代碼

以下是一個 Python 示例代碼,用于讀取和解析 train-images-idx1-ubyte 文件:

import struct
import numpy as np
import matplotlib.pyplot as pltdef read_images(file_path):with open(file_path, 'rb') as file:# 讀取魔數和圖像信息magic_number, num_images, num_rows, num_columns = struct.unpack('>IIII', file.read(16))print(f"Magic Number: {magic_number}, Number of Images: {num_images}, Rows: {num_rows}, Columns: {num_columns}")# 讀取所有圖像images = np.fromfile(file, dtype=np.uint8).reshape(num_images, num_rows, num_columns)return images# 使用示例
file_path = 'train-images-idx3-ubyte'
images = read_images(file_path)
print(f"First Image Shape: {images[0].shape}")# 顯示第一張圖像
plt.imshow(images[0], cmap='gray')
plt.show()

在這段代碼中:

  • 使用 struct.unpack 方法從文件中讀取二進制數據。
  • '>IIII' 表示以大端序讀取四個 4 字節的無符號整數,分別對應魔數、圖像數量、圖像高度和圖像寬度。
  • np.fromfile 方法從文件中讀取剩余的像素數據,并將其重塑為 (num_images, num_rows, num_columns) 的形狀。

通過上述代碼,可以將 train-images-idx1-ubyte 文件中的所有圖像數據讀取到一個 NumPy 數組中,并展示第一張圖像。

train-labels-idx1-ubyte 是一個存儲在 Ubyte 格式中的文件,常用于 MNIST 數據集的標簽文件。這個文件的格式是一個二進制文件,包含了手寫數字圖片對應的標簽。它的存儲結構是非常簡單和緊湊的,下面是具體的存儲格式:

  1. 文件頭(Header)
    文件頭部分包含了一些描述文件內容的信息,具體如下:

    • 魔數(Magic Number):文件的前 4 個字節,用于標識文件類型。對于標簽文件,魔數通常是 2049(十進制)。
    • 標簽數量:緊隨魔數之后的 4 個字節,表示文件中包含的標簽數量。
  2. 標簽數據
    標簽數據部分緊隨文件頭之后,包含了所有圖片的標簽,每個標簽占用 1 個字節(表示 0 到 9 之間的數字)。

具體來說,文件的格式可以用偽代碼表示如下:

[header]
| magic number (4 bytes) | number of items (4 bytes) |
[labels]
| label 1 (1 byte) | label 2 (1 byte) | ... | label N (1 byte) |

讀取 train-labels-idx1-ubyte 文件的示例代碼

以下是一個 Python 示例代碼,用于讀取和解析 train-labels-idx1-ubyte 文件:

import structdef read_labels(file_path):with open(file_path, 'rb') as file:# 讀取魔數和標簽數量magic_number, num_labels = struct.unpack('>II', file.read(8))print(f"Magic Number: {magic_number}, Number of Labels: {num_labels}")# 讀取所有標簽labels = []for _ in range(num_labels):label = struct.unpack('B', file.read(1))[0]labels.append(label)return labels# 使用示例
file_path = 'train-labels-idx1-ubyte'
labels = read_labels(file_path)
print(f"First 10 Labels: {labels[:10]}")

在這段代碼中:

  • 使用 struct.unpack 方法從文件中讀取二進制數據。
  • '>II' 表示以大端序讀取兩個 4 字節的無符號整數,分別對應魔數和標簽數量。
  • 'B' 表示讀取一個 1 字節的無符號整數,表示一個標簽。

通過上述代碼,可以將 train-labels-idx1-ubyte 文件中的所有標簽讀取到一個列表中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41271.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu 20版本安裝Redis教程,以及登陸

第一步 切換到root用戶,使用su命令,進行切換。 輸入: su - 第二步 使用apt命令來搜索redis的軟件包,輸入命令:apt search redis 第三步 選擇需要的redis版本進行安裝,本次選擇默認版本,redis5.…

Emacs 的優點及與 DE 的比較

一、引言 在編程領域,對于工具的選擇一直是開發者們熱議的話題。今天,我們來探討一下 Emacs 及其所具有的優點,并思考使用 Emacs 寫程序是否真的比使用集成開發環境(IDE)更方便。 二、Emacs 的優點 高度可定制性 可以…

mac如何安裝nvm

? vue項目開發,熱更新,webpack,前輩造的輪子:各類的工具,庫,像axios,qs,cookie等輪子在npm上可以拿來直接用,需要node作為環境支撐。 開發時同時有好幾個項目,每個項目的需求不同…

Tornado:高性能異步Web框架詳解

文章目錄 引言官網鏈接Tornado 原理1. 非阻塞I/O2. 異步編程3. 事件循環4. 輕量級 使用方法安裝Tornado創建一個簡單的Web服務器 優缺點優點缺點 結論 引言 在Web開發的廣闊領域中,處理高并發和實時性需求一直是開發者們面臨的挑戰。Tornado,作為一個由…

威綸通創建項目創建(輸入,輸出,畫面切換使用)

創建一個項目 1,打開軟件 2,創建項目,設置系統參數 增加設備,選擇好對應型號(有市面上80%設備) 3,修改頁面,選擇參數 4,創建新頁面 不能在已經編輯的頁面進行新增 5&a…

【HTML入門】第三課 - 標題、段落、空格

這一小節,我們說一些比較零散的知識,HTML課程中呢,其實就是一些標簽,正是這些標簽組成了前端網頁的各種元素,所以你也可以叫他們標簽元素。 像前兩節我們說的,html head body title meta style 。這些都是…

【考研】南郵歷年復試上機試題目與題解

【考研】南郵歷年復試上機試題目與題解 文章目錄 【考研】南郵歷年復試上機試題目與題解個人題目難度評估歷年上機題目PROB1002 求最值問題PROB1003 新對稱素數問題PROB1004 進制轉換PROB1005 涂色問題 (待補)PROB1006 最大公約數和最小公倍數PROB1007 斐波那契數列PROB1008 回…

解決Spring Boot中的數據庫連接池問題

解決Spring Boot中的數據庫連接池問題 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 理解數據庫連接池的重要性 數據庫連接池在任何使用數據庫的應用程序中都起著至關重要的作用。它們管理和維…

解析Java中的動態代理與靜態代理的區別

解析Java中的動態代理與靜態代理的區別 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 引言 代理模式是軟件開發中常用的一種設計模式,用于控制對其它對象的訪問。在Java中&#xf…

C#中的Task.Delay(2000).Wait() 與await Task.Delay(2000)

Task.Delay(2000).Wait() 和 await Task.Delay(2000) 在功能上看似相似,都用于等待一段時間(在這個例子中是2000毫秒),但它們在使用方式和背后的行為上存在一些關鍵差異。 .Result 是 Task 類的一個屬性,它用于獲取任務…

算法刷題筆記 滑動窗口(C++實現,非常詳細)

文章目錄 題目描述基本思路實現代碼 題目描述 給定一個大小為n ≤ 10^6的數組。有一個大小為k的滑動窗口,它從數組的最左邊移動到最右邊。你只能在窗口中看到k個數字。每次滑動窗口向右移動一個位置。以下是一個例子: 該數組為 [1 3 -1 -3 5 3 6 7]&…

用HttpURLConnection復現http響應碼405

目錄 使用GET方法,訪問GET接口,服務端返回405使用GET方法,訪問POST接口,服務端返回405使用POST方法,訪問GET接口,服務端返回405 使用GET方法,訪問GET接口,服務端返回405 發生場景&a…

Linux shell編程學習筆記63:free命令 獲取內存使用信息

0 前言 在系統安全檢查中,內存使用情況也是一塊可以關注的內容。Linux提供了多個獲取內存信息的命令很多。今天我們先研究free命令。 1 free命令的功能、用法和選項說明 1.1 free命令的功能 free 命令可以顯示系統內存的使用情況,包括物理內存、交換…

Java多語言跨境電商外貿商城源碼 tiktok商城系統源碼 跨境電商源碼

Java多語言跨境電商外貿商城源碼 tiktok商城系統源碼 跨境電商源碼 技術棧 PC端使用:vueelementui 用戶端使用:uniapp 管理端使用:vueelementui 后臺服務使用:springbootmybatisplusmysql 功能描述: 對接PayPal…

【面試題】字節一面面試題

自我介紹,項目介紹MQ的使用場景,不同的MQ之前的區別,為什么使用公司的MQ數據庫怎么部署的(應該是問節點,庫表)事務隔離級別innodb為什么選可重復讀作為隔離級別數據庫三大日志,保存先后順序undo…

vue3+electron項目搭建,遇到的坑

我主要是寫后端,所以對前端的vue啊vue-cli只是知其然,不知其所以然 這樣也導致了我在開發前端時候遇到了很多的坑 第一個坑, vue2升級vue3始終升級不成功 第二個坑, vue add electron-builder一直卡進度,進度條走完就是不出提示succes 第一個坑的解決辦法: 按照網上說的升級v…

使用Java實現高性能的文件上傳下載服務

使用Java實現高性能的文件上傳下載服務 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 引言 在現代Web應用中,文件上傳和下載服務是非常常見的功能需求。如何實現高性能、可靠且安全…

Ubuntu 20.04下多版本CUDA的安裝與切換 超詳細教程

目錄 前言一、安裝 CUDA1.找到所需版本對應命令2.下載 .run 文件3.安裝 CUDA4.配置環境變量4.1 寫入環境變量4.2 軟連接 5.驗證安裝 二、安裝 cudnn1.下載 cudnn2.解壓文件3.替換文件4.驗證安裝 三、切換 CUDA 版本1.切換版本2.檢查版本 前言 當我們復現代碼時,總會…

深入分析SSL/TLS服務器的證書(C/C++代碼實現)

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是網絡安全領域的重要協議,它們在保護網絡通信中發揮著至關重要的作用。這些協議通過加密和身份驗證機制,確保數據在傳輸過程中的機密性和完整性…

建投數據與中再數科簽署戰略合作協議

近日,建投數據科技股份有限公司(以下簡稱“建投數據”)與中再保數字科技有限責任公司(以下簡稱“中再數科”)簽署戰略合作協議。雙方通過資源整合共享,實現優勢互補,共同探索產品及服務的跨領域…