MNIST 데이터베이스
개요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
줄리아에서는 머신러닝 데이터 셋 패키지인 MLDatasets.jl
로 사용할 수 있다. 기본적으로는 Float32
타입의 훈련 집합을 불러온다. 옵션으로 이를 바꿔 불러올 수 있다. 사용할 수 있는 메서드는 다음과 같다.
- dataset[i]: i번째 features와 target의 튜플을 반환한다.
- dataset[:]: 전체 features와 target의 튜플을 반환한다.
- length(dataset): 데이터의 수를 반환한다.
- convert2image(dataset, i): i번째 데이터를 gray 스케일의 이미지로 변환한다.
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 ↩︎