シェルスクリプトマガジン

機械学習のココロ(Vol.62掲載)

著者:石井 一夫

最終回は、次世代データサイエンス言語として注目されている「Julia」を紹介します。高速な実行速度、並列分散処理の容易さ、数式記述の自然さなどを特徴とするJuliaは、今後急速に普及すると考えられます。

シェルスクリプトマガジン Vol.62は以下のリンク先でご購入できます。

図4 必要パッケージを読み込むコード

using Pkg
Pkg.add("Flux")
using Flux
using Statistics
using Flux: onehotbatch, onecold, crossentropy, throttle
using Base.Iterators: repeated

図5 MNIST データを読み込むコード

imgs = Flux.Data.MNIST.images()
labels = Flux.Data.MNIST.labels()

図7 訓練用データの前処理用コード

X = hcat(float.(reshape.(imgs, :))...)
Y = onehotbatch(labels, 0:9)

図8 モデルの構築用コード

m = Chain(
  Dense(28^2, 32, relu),
  Dense(32, 10),
  softmax)

図9 損失関数などの設定用コード

loss(x, y) = crossentropy(m(x), y)
opt = ADAM()
accuracy(x, y) = mean(onecold(m(x)) .== onecold(y))
dataset = repeated((X,Y),200)
evalcb = () -> @show(loss(X, Y))

図10 訓練データを用いた学習をするコード

Flux.train!(loss, params(m), dataset, opt, cb = throttle(evalcb, 10))

図13 テストデータの前処理用コード

test_X = hcat(float.(reshape.(Flux.Data.MNIST.images(:test), :))...)
test_Y = onehotbatch(Flux.Data.MNIST.labels(:test), 0:9)

図14 テスト画像の数字を推測するコード

onecold(m(test_X[:,5287])) - 1