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))
ラベルは整数で与えられるため、ワンホットエンコーディングを別途行う必要がある。
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
권건우·허령, 人工知能をマンガと野史で学ぶ 2, p68 ↩︎