logo

MNIST Database 📂機械学習

MNIST Database

概要1

$$ \includegraphics[height=20em]{https://upload.wikimedia.org/wikipedia/commons/2/27/MnistExamples.png} $$

MNISTmodified national institute of standards and technology データベースとは、アメリカの高校生と人口調査局の職員の数字の手書き文字に関するデータセットを指す。一般に[エムニスト]と呼ばれる。

機械学習/ディープラーニング入門の例としてよく使用されるデータセットである。NISTでは、手書きの郵便番号の自動分類のための文字認識技術の評価のため、以下のような形式で手書きデータを収集した。ここでヤン・ルカンYann LeCunが高校生と人口調査局の職員の手書きデータを取り、前処理を行い、MNISTを作成した。画像のサイズは28 x 28で、60,000枚のトレーニングセットと10,000枚のテストセットで構成されている。

$$ \includegraphics[height=30em]{https://www.nist.gov/sites/default/files/styles/960_x_960_limit/public/images/2019/04/27/sd19.jpg?itok=oETq77cZ} $$

使用方法

Julia

Juliaでは、機械学習データセットパッケージであるMLDatasets.jlを使用できる。基本的にはFloat32型のトレーニングセットを読み込む。オプションでこれを変更して読み込むことができる。使用できるメソッドは以下の通り。

  • dataset[i]: i番目の特徴量とターゲットのタプルを返す。
  • dataset[:]: 全ての特徴量とターゲットのタプルを返す。
  • length(dataset): データの数を返す。
  • convert2image(dataset, i): i番目のデータをグレースケールの画像に変換する。ImageShow.jlパッケージが必要である。
julia> using MLDatasets

julia> train = MNIST()
dataset MNIST:
  metadata  =>    Dict{String, Any} with 3 entries
  split     =>    :train
  features  =>    28×28×60000 Array{Float32, 3}
  targets   =>    60000-element Vector{Int64}

julia> test = MNIST(Float64, :test)
dataset MNIST:
  metadata  =>    Dict{String, Any} with 3 entries
  split     =>    :test
  features  =>    28×28×10000 Array{Float64, 3}
  targets   =>    10000-element Vector{Int64}

julia> length(train), length(test)
(60000, 10000)

julia> using Plots
julia> using ImageShow

julia> train.targets[1]
5

julia> heatmap(convert2image(train, 1))

MNIST[1].png

ラベルは整数で与えられるため、ワンホットエンコーディングを別途行う必要がある。

julia> train.targets[1:5]
5-element Vector{Int64}:
 5
 0
 4
 1
 9

julia> using Flux
julia> Flux.onehotbatch(train.targets[1:5], 0:9)
10×5 OneHotMatrix(::Vector{UInt32}) with eltype Bool:
 ⋅  1  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  1  ⋅
 ⋅  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  1  ⋅  ⋅
 1  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  ⋅  ⋅
 ⋅  ⋅  ⋅  ⋅  1

環境

  • OS: Windows11
  • Version: Julia v1.8.2, MLDatasets v0.7.6, Plots v1.36.1, ImageShow v0.3.6, Flux v0.13.7

  1. 권건우·허령, 人工知能をマンガと野史で学ぶ 2, p68 ↩︎