Google ColaboratoryでChainerを使ってみる
Chainerを使ってSLポリシーネットワークを作成するため、まずはMNISTを使ってChainerの使い方を学習する。
勉強用なのでGoogle Colaboratoryで試してみる。
本格的にディープラーニングするときはクラウド使うかもしれない。
環境構築
Google Colaboratoryで新しいノートブックを作成する。
Runtime type: Python3
Hardware Accelerator: GPU
Chainerは今はGoogle Colaboratoryで公式に提供されているため、マニュアルでのインストールは不要のようだ。
Chainerのimport
import chainer import chainer.functions as F import chainer.links as L from chainer import training chainer.print_runtime_info()
バージョン情報
Platform: Linux-4.14.79+-x86_64-with-Ubuntu-18.04-bionic Chainer: 5.0.0 NumPy: 1.14.6 CuPy: CuPy Version : 5.2.0 CUDA Root : /usr/local/cuda CUDA Build Version : 10000 CUDA Driver Version : 10000 CUDA Runtime Version : 10000 cuDNN Build Version : 7301 cuDNN Version : 7301 NCCL Build Version : 2307 iDeep: 2.0.0.post3
ネットワークの定義
class CNN(chainer.Chain): def __init__(self, train=True): super(CNN, self).__init__( l1 = L.Linear(28*28, 100), #中間層。入力が28x28個のノード。中間層のノードは100個。 l2 = L.Linear(100,10)) #出力層。100個のノードを受け取って10個の出力をする(0~9に相当する。) def __call__(self, x): #接続関係を定義している。 h = F.sigmoid(self.l1(x)) #l1のあとシグモイド関数を通して出力hを得る。 h = self.l2(h) #l2を通して出力hを得る。 return h
MNISTデータセットのロード
train, test = chainer.datasets.get_mnist(ndim=3)
CNNモデルと学習のセットアップ
model = L.Classifier(CNN()) optimizer = chainer.optimizers.Adam() optimizer.setup(model) train_iter = chainer.iterators.SerialIterator(train, batch_size=100) updater = training.StandardUpdater(train_iter, optimizer) trainer = training.Trainer(updater, (5, 'epoch'), out='result')
学習させる
trainer.run() # 前向き計算も誤差逆伝播法も実行される。
参考
最強囲碁AI アルファ碁 解体新書
Chainerのソースを解析。MNISTサンプルを追ってみる | コード7区
感想
Chainerの雰囲気は分かったが、当然ながら詳細は理解できていない。
簡単に記述できる分いろいろな計算が表には出てこないので、ちゃんと理解するには基礎から勉強する必要がある。