Red Chainer 0.2.0 リリースしました

Red Chainer 0.2.0をリリースしました

今回は次のような機能をリリースしました🎉

を行いました

Tanh

TanhはHyperbolic Tangentとも言い次の式で表されます

f:id:hatappi1225:20180202091109p:plain

irb(main):008:0> x = Numo::DFloat.new(3).seq(-1, 2)
=> Numo::DFloat#shape=[3]
[-1, 1, 3]
irb(main):009:0> Chainer::Functions::Activation::Tanh.tanh(x).data
=> Numo::DFloat#shape=[3]
[-0.761594, 0.761594, 0.995055]

LeakyReLU

LeakyReLUはxが0以上の時はReLUの時と同じくxを返します
xが0よりも小さいときが挙動としては異なり、ReLUが0なのに対してLeakyReLUはαという傾斜をxにかけます

f:id:hatappi1225:20180201225804p:plain

irb(main):010:0> x = Numo::DFloat[[-1, 0], [2, -3], [-2, 1]]
=> Numo::DFloat#shape=[3,2]
[[-1, 0], 
 [2, -3], 
 [-2, 1]]
# 傾斜を0.2にする
irb(main):011:0> Chainer::Functions::Activation::LeakyReLU.leaky_relu(x, slope:0.2).data
=> Numo::DFloat#shape=[3,2]
[[-0.2, 0], 
 [2, -0.6], 
 [-0.4, 1]]

Snapshotのサポート

これは文字通りSnapshotですw
例えば次のようにMNISTのサンプルを動かしているとします

$ bundle exec ruby examples/mnist.rb -f 1
epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.823217                          0.734533                                 10.3773       
2           0.342721                          0.90125                                  20.8727       
3           0.295657                          0.914817                                 31.5943       
4           0.271687                          0.922067                                 42.1609       
5           0.254289                          0.92665                                  53.1804       
6           0.240501                          0.930533                                 63.5396 

ただ途中でプロセスがおちてしまったなんてことがあると思います
今までは一からだったのですが、snapshotをとることで途中から再開することが出来ます。
MNISTのサンプルでは-fでintegerを渡すことで何epochごとにsnapshotをとるか指定できます

snapshotから再開する時はMNISTの場合は次のように途中から再開することが出来ます

$ bundle exec ruby examples/mnist.rb -f 1 -r result/snapshot_iter_3600

内部的にはMarshalで書き出し、読み出しを行なっています

最後に

今回は0.2.0のリリース内容の紹介を行いました