はじめに
この記事では2回に渡って、下記の内容を解説します。
- Google Colab上でJuliaを実行できるように設定し、またGPUを使えるようにする
- Juliaの機械学習ライブラリFlux.jlに関する解説
- Flux.jlを用いて深層学習モデルを構築し、Pythonと比較を行う
Juliaとは
- Juliaは、MITよって開発され2012年にオープンソース化された、高性能な動的プログラミング言語
- 汎用言語で、あらゆるアプリケーションの作成に使用できるが、その機能の多くは数値解析や計算科学に適している
- 2,500万回以上ダウンロードされており、Juliaコミュニテでは5,000を超えるパッケージが登録されている
- Pythonのように簡潔に書くことができ、実行速度はPythonやRよりも1桁速いと言われている
JuliaをGoogle Colabで実行する
今回、実行環境にはGoogle Colabを使用します。
Google ColabではデフォルトでJuliaを実行できるようにはなっていないので、次のようにjsonを記載した.ipynbファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Julia on Google Colab.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "julia-1.5", "display_name": "julia-1.5" }, "accelerator": "GPU" }, "cells": [ { "cell_type": "code", "metadata": { "id": "CN08w8uiICa8", "colab_type": "code", "colab": {} }, "source": [ "!curl -sSL \"https://julialang-s3.julialang.org/bin/linux/x64/1.5/julia-1.5.1-linux-x86_64.tar.gz\" -o julia.tar.gz\n", "!tar -xzf julia.tar.gz -C /usr --strip-components 1\n", "!rm -rf julia.tar.gz*\n", "!julia -e 'using Pkg; pkg\"add IJulia\"'" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "sGOaN98-IZxj", "colab_type": "text" }, "source": [ "上記をshift+enterで実行後、「ランタイム」->「ランタイムのタイプを変更」->「保存」を押してください。" ] }, { "cell_type": "code", "metadata": { "id": "ls5Cl0hsIndc", "colab_type": "code", "colab": {} }, "source": [ "versioninfo()" ], "execution_count": 0, "outputs": [] } ] } |
このjsonにはJuliaのバージョンやGPUの設定などが書かれています。あらかじめ作成したものを Julia on Google Colab.ipynb に公開していますので、ダウンロードしてください。
Julia on Google Colab.ipynbを開いたら、一番上のセルを実行してください。
実行が完了したら、上のメニューの「ランタイム」->「ランタイムのタイプを変更」を選択してください。
そうすると、Juliaのバージョンが記されたダイアログが出てくるので、「保存」を押してください。
これで、ランタイムがリセットされ、Juliaの実行環境が整いました。
試しに、versioninfo() のセルを実行してみましょう。下記のように出力されれば問題ないです。
Flux.jlとは
Juliaの実行環境が整いましたので、Flux.jlについて解説したいと思います。
- Flux.jlはJuliaの深層学習ライブラリであり、PythonでいうところのTensorFlowやPyTorch的な位置づけ
- 深層学習のためのデータの読み込み、モデル構築、損失関数、オプティマイザーなどが提供されている
- CUDAとCUDNNがインストールされいる環境であれば、GPUを使った学習も可能
以降で、Flux.jlに関する簡単な使い方を解説します。コードは Julia on Google Colab.ipynbにも記載してありますので、それを実行しながら見ていただければと思います。
パッケージの追加と呼び出し
import Pkg; Pkg.add(“Flux”)でFlux.jlを追加できます。
パッケージの呼び出しは using Flux でできます。
データ読み込み
DataLoaderを使うことで、反復処理のためのミニバッチを作成することができます。
下のコードでは、10の要素からなる100個のXtrainと100個の正解ラベルYtrainをDataLoaderに渡し、サイズ2のミニバッチを作成しています。
レイヤー・モデルの定義
レイヤーは次のように、functionで定義することができます。
また、Flux.jlに実装されているDenseを使って下記のようにすることもできます。
Chainを用いれば、レイヤーを積み重ねてモデルを定義することができます。
損失関数
損失関数は、モデルが予測した予測値と正解データの2つを引き数に取ります。
aggオプションで、バッチで実行される集計のタイプを指定することができます。
もちろん、下記のように自分で損失関数を定義することもできます。
オプティマイザー
ADAMオプティマイザーを使う時は、下記のように宣言します。
Flux.train!(トレーニングループ)渡すこともでき、ループ内のモデルのすべてのパラメーターを更新します。
おわりに
今回は、Juliaの実行環境の設定方法とFlux.jlについて解説しました。
次回は、いよいよFlux.jlを用いて手書き数字の画像を分類するMNISTをやってみたいと思います。
(K.K)
追記:関連
Julia関連記事については、次にもまとめてあります。