2017.04.01 Sat |
Chainer入門その1(NumPy入門)
http://chainer.org/
今回は、chainer入門をやっていきたいと思います。
chainerというのは、主としてPythonで書かれた、日本産のDeepLearningのフレームワークです。
DeepLearningのフレームワークは、他にはAlphabetのTensorFlow、University of TorontoのTheano、FacebookのTorch7、U.C.BerkeleyのCaffeなどがありますが、日本では、TensorFlowとchainerが主流です(ネットの記事数だと2:1くらいの割合)。
chainerは、日本の精鋭Preferred Networksが作成しており、非常によくできているという話をよく聞くのと、最近のバージョンアップで、計算速度がさらに向上したらしいので、今回試してみたいと思います。
参考資料として、
chainer playground
https://play.chainer.org/
chainer tutorial
http://docs.chainer.org/en/latest/tutorial/index.html
Pythonによるデータ分析入門
https://www.oreilly.co.jp/books/9784873116556/
を使用しています。
chainerの環境設定は、今回はwindows10で実行しているのですが、GPUのない環境では、とりあえず、
VisualStudio2017(C++に関係ありそうなものを適当にチェックいれる)
https://www.visualstudio.com/ja/downloads/?rr=https%3A%2F%2Fwww.google.co.jp%2F
Anaconda
https://www.continuum.io/downloads
をこの順でいれた後に、
Anaconda Promptを起動して
pip install chainer
を実行してインストールできます(個人的には無事できました)。
chainerのサンプルコードは、python2.x系で書かれていることが多く、サンプルコードをそのまま使いたいのであれば、python2.x系いれて実行した方がよいでしょう。今回はpython3.x系で実行していきたいと思います。
各コマンドの実行は、Anacondaをインストールすれば自動的に使えるようになる、JupyterNotebookを使用します。Jupyter Notebookについては、以下のQuick Startのリンクを参照ください。
https://jupyter.readthedocs.io/en/latest/content-quickstart.html
それでは、chainer入門を始めていきたいと思います。
chainer入門の前に、実は必要なことがありまして、まず、Pythonの文法の理解です。これをやり始めるとかなりの量になるので、Pythonの文法に関しては下記書籍かどっとインストールによる動画レクチャーをご覧ください。
みんなのPython 第4版
https://www.amazon.co.jp/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AEPython-%E7%AC%AC4%E7%89%88-%E6%9F%B4%E7%94%B0-%E6%B7%B3/dp/479738946X
ドットインストール Python編
http://dotinstall.com/lessons/basic_python_v3
次に数値計算ライブラリのNumPyの入門を軽くしたいと思います。
まず、NumPyは、「Numerical Python」の略語で、微積分などの科学技術計算やデータ分析のためのPythonパッケージです。
NumPyのtutorialは以下になります。
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
今回は様々なマテリアルから、情報を抽出してNumPy入門をやっていきたいと思います。
NumPyの特徴を以下に列挙しましょう。
・ベクトル演算とブロードキャストを提供する高速で効率の良い多次元配列の実装である、ndarray
・呼び出しにループを必要としないため高速な、標準的な数学関数
・メモリマップファイル機能を提供する入出力
・ 行列計算、乱数生成などの機能
・C,C++,Fortranへのインターフェイス
それでは、NumPy入門始めたいと思います。
JupyterNotebookを起動して、numpyをインポートして、今後はnpで呼び出せるようにしましょう。
import numpy as np
機械学習系では、よく「配列」が出てきますが、これは、NumPyの多次元配列オブジェクトndarrayです。重要なので覚えておいてください。
以下基本コードと最低限の説明だけになりますが、自分の手で入力していけばより理解が深まると思います。
#多次元配列オブジェクトndarray
#ndarrayの生成
data1=[1,2.2,4,6,8]
array1=np.array(data1)
#結果の出力
array1
#各要素を2倍
array1*2
#各要素を2乗
array1**2
#array1の次元数([]が何個あるか)
array1.ndim
#[]を何個、[]の中に何個成分があるか
array1.shape
#要素の型(ndarrayはすべて同じデータである必要がある)
array1.dtype
それでは、もう一つ、ndarrayを生成してみましょう。
#多次元配列オブジェクトndarray
#ndarrayの生成
data2=([1,2.2,4,6],[4,7,1,8])
array2=np.array(data2)
#結果の出力
array2
#各要素を2倍
array2*2
#各要素を2乗
array2**2
#array2の次元数([]が何個あるか)
array2.ndim
#[]を何個、[]の中に何個成分があるか
array2.shape
#要素の型(ndarrayはすべて同じデータである必要がある)
array2.dtype
#np.array以外での、ndarray変数の作成方法
#指定した数の0要素を返す、np.zeros
np.zeros(5)
np.zeros((2,4))
#指定した数の1要素を返す、np.ones
np.ones(5)
np.ones((2,4))
#N×Nの単位行列(対角成分の要素が1,それ以外が0となる行列)
np.eye(2)
np.eye(4)
np.identity(2)
np.identity(4)
#等間隔に値を増減させた値を返すnp.arange
np.arange(10)
np.arangeについてはよく使うので詳細な解説を加えましょう。
nparangeの引数は以下になります。
np.arange([start, ]stop, [step, ]dtype=None)
最低限指定しないといけないのは、stopだけです。
デフォルトでは、start=0, step=1, dtypeはデフォルト値なしでデータから判断、となっています。
#例えば、start=2,stop=10,step=2ならば、2,4,6,8の配列が出てきます。
np.arange(2,10,2)
#以下にも細かい例を挙げていきましょう
#start=0,stop=4,step=1
np.arange(4)
#start=0.0,stop=4.0,step=1.0
np.arange(4.0)
#start=2,stop=9,step=1
np.arange(2,9)
#start=2,stop=9,step=2
d=np.arange(2,9,2)
d
d.dtype
e=np.arange(2,9,2,dtype=np.float64)
e
e.dtype
dtype引数でデータ型は変更でき、
np.int32が符号あり32ビット整数値
np.float64が倍精度浮動小数点型
になります。
chainerには、まったく入門できませんでしたが、、次回以降徐々に入門できたらいいなと思います。
今日はここまで。
鈴木瑞人
東京大学大学院 新領域創成科学研究科 メディカル情報生命専攻 博士課程1年
東京大学機械学習勉強会 代表
NPO法人Bizjapan Technology部門 BizXチームリーダー