最内ループからはじめる深層学習

http://int.main.jp/txt/waifu2x.html

まあもうコード大きく変更することはないだろうしそろそろまとめていいかと思ったのでまとめた。

もともと、5/30にはじめて、2日実装、1日まとめ書いて、いまどきのチューニングはこうする、という手順の紹介にする予定だった。それが6月中に終わらないなんて…

waifu2x-caffeより遅い状態だったので高速化手順の紹介()という状態だったけど、どうも周辺の報告を見ると、Fermi、Maxwellではwaifu2x-caffeより速いらしい、ようなのでまあ書いてもいいかと思った。

多分もっと速い実装は作れると思うけど、僕は「とりあえずなんでもいいからちゃんと動いてる」のには意味があると思ってるので、waifu2xの実装の中では一番速い(かも)の紹介ということで。

最内ループしか見てなかったけど、予想に反してCNNをちょっと理解できた気がするな。つまり、入力にエラー画像、出力に正解画像を置いて、ネットワーク内のweightを最適化していくとできる、という処理がなんとなくわかった気がする。「最内ループからはじめる深層学習」というタイトルは「私は機械学習全然知らなかったし最内ループしか見てなかったけどちょっと理解できた」という日記のタイトル。


僕の中期目標として、

  • 実際的なチューニング作業のドキュメントをつくる
    • そこらの最適化マニュアルみたいなのを実際のアプリケーションに適用した応用例みたいなのをたくさん作りたい
  • mad と fma の違いもわからないような人のデスクトップにGFLOPS値を表示させる

というのがあるのだけど、どうなんだろな。まあ結局やることはほぼmatmulなので前書いたのと内容がかぶっている。階層メモリをなんとかしてFPUをフルで回すという…でも処理の結果がわかりやすいのでmatmulよりは多くの人の心に響きやすいかも。

あと今回はCUDA OpenCLも入れたしまあいいか。

あとGFLOPSを表示させるならちゃんとw2xcr.exeの使いかたを書くべきでは?そしてAPIでFLOPSとる方法も書くべきでは…