MNIST データセットのダウンロード + idx3-ubyte 解析 [超詳細 + 使いやすい]

序文

モデルをトレーニングする場合、MNIST データセットを使用してモデルをトレーニングすることがよくありますが、MNIST データセットを取得するにはどうすればよいでしょうか? 練習の後、ブロガーは、画面の前で MNIST データセットを使用するのに役立つことを期待して、経験をまとめました。

目次

序文

1 MNIST データセット ファイルをダウンロードする

2 idx3-ubyte ファイルを解析する

2.1 トレーニングセットの解析

2.2 テストセットの解析

3.py ファイルを実行する


1 MNIST データセット ファイルをダウンロードする

MNIST データ セットは外部ネットワークに公開されているため、ダウンロードが比較的遅いため、ブロガーは MNIST を Baidu ネットワーク ディスクに入れました。

リンク:https://pan.baidu.com/s/1V-4FOePbTyBG7qZ7ge_TqQ?pwd= 
dw2i 抽出コード:dw2i

ローカルにダウンロードした後、gz サフィックス圧縮パッケージを解凍します。

次の表で詳しく説明されている 4 つのファイルが含まれています。

 

 グラフのソースは次から転送されます: MNIST Dataset_Keep Sensible 802's Blog-CSDN Blog_mnist Dataset

2 idx3-ubyte ファイルを解析する

次に、idx3-ubyte ファイルを画像形式に変換する必要があります。

トレーニング セットとテスト セットを別々に変換します。ブロガーは pycharm を使用します

2.1 トレーニングセットの解析

train-images.idx3-ubyte と train-labels.idx1-ubyte は、それぞれトレーニング セットの画像とラベルです。データ/ラベル ファイルの場所は、ローカルのトレーニング セットが保存されている場所に変更する必要があります。

 

 

import numpy as np
import struct

from PIL import Image
import os

data_file = r'D:\postgraduate\DUT\tpds\malicious_node\MNIST_data\train-images.idx3-ubyte'
# It's 47040016B, but we should set to 47040000B
data_file_size = 47040016
data_file_size = str(data_file_size - 16) + 'B'

data_buf = open(data_file, 'rb').read()

magic, numImages, numRows, numColumns = struct.unpack_from(
    '>IIII', data_buf, 0)
datas = struct.unpack_from(
    '>' + data_file_size, data_buf, struct.calcsize('>IIII'))
datas = np.array(datas).astype(np.uint8).reshape(
    numImages, 1, numRows, numColumns)

label_file = r'D:\postgraduate\DUT\tpds\malicious_node\MNIST_data\train-labels.idx1-ubyte'

# It's 60008B, but we should set to 60000B
label_file_size = 60008
label_file_size = str(label_file_size - 8) + 'B'

label_buf = open(label_file, 'rb').read()

magic, numLabels = struct.unpack_from('>II', label_buf, 0)
labels = struct.unpack_from(
    '>' + label_file_size, label_buf, struct.calcsize('>II'))
labels = np.array(labels).astype(np.int64)

datas_root = 'mnist_train'
if not os.path.exists(datas_root):
    os.mkdir(datas_root)

for i in range(10):
    file_name = datas_root + os.sep + str(i)
    if not os.path.exists(file_name):
        os.mkdir(file_name)

for ii in range(numLabels):
    img = Image.fromarray(datas[ii, 0, 0:28, 0:28])
    label = labels[ii]
    file_name = datas_root + os.sep + str(label) + os.sep + \
                'mnist_train_' + str(ii) + '.png'
    img.save(file_name)

2.2 テストセットの解析

t10k-labels.idx3-ubyte と t10k-labels.idx1-ubyte は、それぞれテスト セットの画像とラベルです。データ/ラベル ファイルの場所は、ローカル テスト セットが保存されている場所に変更する必要があります。

 

 

import numpy as np
import struct

from PIL import Image
import os

data_file = r'D:\postgraduate\DUT\tpds\malicious_node\MNIST_data\t10k-images.idx3-ubyte'
# It's 7840016B, but we should set to 7840000B
data_file_size = 7840016
data_file_size = str(data_file_size - 16) + 'B'

data_buf = open(data_file, 'rb').read()

magic, numImages, numRows, numColumns = struct.unpack_from(
    '>IIII', data_buf, 0)
datas = struct.unpack_from(
    '>' + data_file_size, data_buf, struct.calcsize('>IIII'))
datas = np.array(datas).astype(np.uint8).reshape(
    numImages, 1, numRows, numColumns)

label_file = r'D:\postgraduate\DUT\tpds\malicious_node\MNIST_data\t10k-labels.idx1-ubyte'

# It's 10008B, but we should set to 10000B
label_file_size = 10008
label_file_size = str(label_file_size - 8) + 'B'

label_buf = open(label_file, 'rb').read()

magic, numLabels = struct.unpack_from('>II', label_buf, 0)
labels = struct.unpack_from(
    '>' + label_file_size, label_buf, struct.calcsize('>II'))
labels = np.array(labels).astype(np.int64)

datas_root = 'mnist_test'
if not os.path.exists(datas_root):
    os.mkdir(datas_root)

for i in range(10):
    file_name = datas_root + os.sep + str(i)
    if not os.path.exists(file_name):
        os.mkdir(file_name)

for ii in range(numLabels):
    img = Image.fromarray(datas[ii, 0, 0:28, 0:28])
    label = labels[ii]
    file_name = datas_root + os.sep + str(label) + os.sep + \
                'mnist_test_' + str(ii) + '.png'
    img.save(file_name)

3.py ファイルを実行する

上記の 2 つの py ファイルを実行すると、プロジェクトのルート ディレクトリに 2 つのフォルダーが生成されます。

 

このうち、mnist_train は 6w の絵、minst_test は 1w の絵を持っています。

 

 

これで、モデルのトレーニングを開始できます。! !

 

 

 

おすすめ

転載: blog.csdn.net/qq_43604183/article/details/127984248