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の雰囲気は分かったが、当然ながら詳細は理解できていない。
簡単に記述できる分いろいろな計算が表には出てこないので、ちゃんと理解するには基礎から勉強する必要がある。