「ゼロから作るDeep Learning」の第7章、CNNを勉強したので、PythonではなくてC言語で1から実装してみたい。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
Convolutionの理解
例えばCIFAR-10を実行する場合、入力の画像は32×32×3である。これを[3,32,32]
と表記する。
これに対して畳み込みのフィルタを適用する。本書で使っているフィルタは、30フィルタ、3チャネル、縦5、横5のフィルタなので、[30,3,5,5]
と表記することができる。
とりあえずBのことは置いておいて、入力画像に対してこのフィルタを適用すると以下のようになる。
ちなみにここではバッチサイズは1と設定している。
30枚のフィルタを使っているのでフィルタとしては30個の畳み込み後の画像が作られる。 それぞれに3チャネル分がのフィルタがあるが、3次元の畳み込みでは、3チャネル分の畳み込み適用後の数値を加算するので、結果としては1枚の画像となる。 つまり、32×32に対して5×5のフィルタを適用した結果作成される28×28の畳み込み後の画像が、30枚分作られるということになる。
図. CIFAR-10の画像に対する畳み込みの適用イメージ。
と、ここまで頑張ってみたのは良いものの、C++に落とし込む時間がない... とりあえず今日はここまで...