Upload
ryosuke-okuta
View
2.380
Download
3
Embed Size (px)
Citation preview
Chainer v1.6からv1.7の新機能
2016/03/18 Chainer Meetup #02@ドワンゴ
(株)Preferred Networks
奥田 遼介
自己紹介
奥田 遼介 -2014東北大学 修士
文字列処理など
2014 (株)プリファードインフラストラクチャー
2014- (株)プリファードネットワークス
チーフアーキテクト
映像解析系、製造業系にかかわる研究開発
ChainerやCuPyの開発最新版v1.7.1(2016/3/15)
2/18
前回のChainer Meetup #01(2015/12/19)からのアップデート
2016/1/19 v1.6.0
2016/2/ 3 v1.6.1
2016/2/17 v1.6.2
2016/3/ 1 v1.7.0
2016/3/15 v1.7.1
マイナー2回
リビジョン3回
3/18
Issue/PRの統計
0 20 40 60 80 100 120
v1.6.0
v1.6.1
v1.6.2
v1.7.0
v1.7.1
v1.6.0 v1.6.1 v1.6.2 v1.7.0 v1.7.1
feature 30 22
bug 25 14 2 4 7
enhancement 14 7 6 7 2
install 3 3 1 3
test 20 2 8 3 4
document 10 6 5 8 7
example 2 1 3 1
4/18
互換性ポリシーの作成 v1.6.0
互換性のポリシーを作りました (#829)
メジャー :不定期
後方互換性のない変更を含む
マイナー :6週間ごと
新機能の追加
後方互換性は維持する
リビジョン :2週間ごと
バグ修正
ドキュメントに基づいた互換性維持
互換性はドキュメントに書かれた内容に従って維持されます
5/18
新しいコア機能
デバッグモードの導入(#899)
forward/backwardの値のNaNチェックなどを行う
softmax_cross_entorpyではlabelの範囲チェックも
有効にするとオーバーヘッドがあります
ファンクションフックの追加(#933)
forward/backward の呼び出し時にフックを仕掛けることが可
能になった
Variable.debug_printメソッドの追加(#830)
data とgradについて、device ID, shape, dtype 統計情報を表
示
6/18
デバッグモード
chainer.set_device(True)で使えます
NaNの検出デモ
In [1]: import chainer, numpy
In [2]: chainer.set_debug(True)In [3]: x = chainer.Variable(numpuy.array([float(‘nan’)], ’f’))In [4]: chainer.functions.identity(x)-----------------------------------------------------------RuntimeError Traceback (most recent call last)<ipython-input-4-e234ae95dfb6> in <module>()----> 1 chainer.functions.identity(x)=========省略=========RuntimeError: NaN is detected on forward computation
7/18
ファンクションフック
例えば時間を測るフックが作れます:TimerHook
In [1]: import chainer, chainer.function_hooks, numpy
In [2]: h = chainer.function_hooks.TimerHook()In [3]: link = chainer.links.Linear(5, 5)In [4]: with h:
...: link(chainer.Variable(numpy.zeros((3, 5), 'f')))
...:In [5]: print(h.total_time())0.011421918869
In [6]: print(h.call_history)[(<chainer.functions.connection.linear.LinearFunction object at 0x7fb18d9ff790>, 0.011421918869018555)]
8/18
Variable.debug_print
debug_print()を呼ぶだけ
In [1]: import chainer, numpyIn [2]: d = numpy.random.uniform(-1, 1, (3, 5)).astype('f')In [3]: x = chainer.Variable(d)In [4]: print(x.debug_print())<variable at 0x7fac1017a790>- device: CPU- volatile: OFF- backend: <type 'numpy.ndarray'>- shape: (3, 5)- dtype: float32- statistics: mean=-0.02048243, std=0.46310186- grad: None
9/18
新しい関数(Chainer)その1
activation
elu (#754)
log_softmax (#842)
maxout (#856)
slstm (#518)
LSTM along binary trees
array
broadcast_to (#826)
expand_dims (#690)
evaluation
binary_accuracy (#757)
Accuracy for binary classification.
10/18
新しい関数(Chainer)その2
math
batch_l2_norm_squared (#828)
det, batch_det (#613)
matrix determinant
inv, batch_inv (#608)
Differentiable matrix inversion
pool
unpooling_2d(#599)
spatial upsampling
Link
StatefulGRU (#817)
GRU with LSTM chain-like interface
Maxout (#856)11/18
関数の機能拡張(Chainer)
fixed_batch_normalization (#798)
Backward をサポート
sigmoid_cross_entropy (#790)
ignore_label をサポート
ctc_padding(#689)
異なる長さのシーケンスからなるミニバッチをサポート
12/18
新しい関数(CuPy)
asfortranarray(#923)
fortranオーダーにする
broadcast_to (#644)
NumPy 1.10からの新機能
roll (#827)
くるくる回す
13/18
NumPyシリアライザの追加
NumPy NPZ シリアライザが追加されました (#810)
これまでのシリアライザと同じく使えます
save_npz(filename, obj, compression=True):
NPZは、numpyの配列1個が1ファイルとなっているものを集め
たzipファイルです。
h5pyのインストールがオプショナルに
hdf5が不要になり、インストールが簡単に
14/18
Python関係
インストールを安定化させました
依存ライブラリの削減
h5py をオプショナルに
セットアップ時のNumPy依存をなくす
setuptoolsやpipとの長い戦い
NumPy 1.10サポート
Chainer,CuPy共に最新版のNumPyに対応
注意
ChainerはPython3.5.0では動きません。Python3.5.1を使って
ください
15/18
CUDA関係
cuDNN v4対応 (#838 #756)
v2からv4すべてのライブラリに対応しました
まだ一部最新の関数を使わないコードのままです
PRお待ちしております
Device-to-device copy時のGPUDirect使用 (#884)
特定条件下でGPU間でのメモリ速度が向上しました
ホストメモリの経由がなくなった
16/18
そのほか
沢山の改善が行われました
詳しくはRelease noteを見てください
https://github.com/pfnet/chainer/releases
17/18
さいごに
PRありがとうございます (敬称略)
@cemoody @hrantzsch @jnishi @jnory
@kashif @muupan @sinhrks @t-abe
@wkentaro
皆様のPRをお待ちしております
Chainer開発アルバイトに興味ある人はぜひ声をかけて
ください
18/18