フラックスを用いたJuliaにおける簡単なMNIST認識
9805 ワード
簡単な紹介
ニューラルネットワーク
リソース
紙
IBM雲教育- What are Neural Networks?
ビデオ
ニューラルネットワークのエピソード
https://cs50.harvard.edu/ai/2020/weeks/5/
ジュリア
Juliaはオープンソースでコンパイルされた、高レベルのプログラミング言語です.(ジュリアについての詳細)
これは、例えば、VSCodeまたはhttps://github.com/julia-vscode/julia-vscode(Junoで構築されている)で、AtomのようなIDEで使用することができます.
フラックス
フラックスは、ジュリアで書かれた深い機械学習ライブラリです.詳細は、Githubリポジトリhttps://arxiv.org/pdf/1811.01457.pdfまたはホームページhttps://github.com/FluxML/Flux.jlにおいて、https://fluxml.ai/となります.
文部省
MNISTは手書き数字イメージを含むデータセットです
プログラム
インポートライブラリ
ジュリアでライブラリをインストールしてインストールするには、pkgを使うことができます.機能追加
#Example
using Pkg
Pkg.add("Flux")
またはREPLとタイプ] add Flux
を使用します.
プロジェクトファイル内のライブラリの使用
using Flux, MLDatasets, CUDA
using Flux: train!, onehotbatch
データを得る
MLDatasetsライブラリには、いくつかのVisonデータセットが含まれます.を含む.MLDatasets.MNIST.traindata()
は60000の28 x 28グレースケール画像とラベルベクトル(0から9までの数字)を含む配列を返します.MLDatasets.MNIST.testdata()
は10000の画像とラベルを返します.
# Load training data (images, labels)
x_train, y_train = MLDatasets.MNIST.traindata()
# Load test data (images, labels)
x_test, y_test = MLDatasets.MNIST.testdata()
# Convert grayscale to float
x_train = Float32.(x_train)
# Create labels batch
y_train = Flux.onehotbatch(y_train, 0:9)
文部省
クリエイトモデル
モデルは3層があります
インポートライブラリ
ジュリアでライブラリをインストールしてインストールするには、pkgを使うことができます.機能追加
#Example
using Pkg
Pkg.add("Flux")
またはREPLとタイプ] add Flux
を使用します.プロジェクトファイル内のライブラリの使用
using Flux, MLDatasets, CUDA
using Flux: train!, onehotbatch
データを得る
MLDatasetsライブラリには、いくつかのVisonデータセットが含まれます.を含む.
MLDatasets.MNIST.traindata()
は60000の28 x 28グレースケール画像とラベルベクトル(0から9までの数字)を含む配列を返します.MLDatasets.MNIST.testdata()
は10000の画像とラベルを返します.# Load training data (images, labels)
x_train, y_train = MLDatasets.MNIST.traindata()
# Load test data (images, labels)
x_test, y_test = MLDatasets.MNIST.testdata()
# Convert grayscale to float
x_train = Float32.(x_train)
# Create labels batch
y_train = Flux.onehotbatch(y_train, 0:9)
文部省 クリエイトモデル
モデルは3層があります
model = Chain(
Dense(784, 256, relu),
Dense(256, 10, relu), softmax
)
トレーニング
損失関数 .プロジェクトは
logitcrossentropy
、cross-entropy"This is mathematically equivalent to crossentropy(softmax(ŷ), y), but is more numerically stable than using functions crossentropy and softmax separately."
Flux documentation
博士:as says Flux documentation
https://fluxml.ai/Flux.jl/stable/models/losses/ 損失関数
loss(x, y) = Flux.Losses.logitcrossentropy(model(x), y)
損失関数とパラメータを組み合わせたオプティマイザ
適応モーメント推定博士:Adam
https://fluxml.ai/Flux.jl/stable/training/optimisers オプティマイザ
optimizer = ADAM(0.0001)
トレーニング
parameters = params(model)
# flatten() function converts array 28x28x60000 into 784x60000 (28*28x60000)
train_data = [(Flux.flatten(x_train), Flux.flatten(y_train))]
# Range in loop can be used smaller
for i in 1:400
Flux.train!(loss, parameters, train_data, optimizer)
end
チェック結果
test_data = [(Flux.flatten(x_test), y_test)]
accuracy = 0
for i in 1:length(y_test)
if findmax(model(test_data[1][1][:, i]))[2] - 1 == y_test[i]
accuracy = accuracy + 1
end
end
println(accuracy / length(y_test))
試験結果
Accuracy: 0.91
フルコードはこちら
Reference
この問題について(フラックスを用いたJuliaにおける簡単なMNIST認識), 我々は、より多くの情報をここで見つけました https://dev.to/piotrek124/simple-mnist-recognition-in-julia-using-flux-2fg5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol