logo

MNIST 데이터베이스 📂머신러닝

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))

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 ↩︎