FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「ゼロから作るDeep Learning」第7章のCNNでCIFAR-10に挑戦してみる (3. CNNにおけるConvolutionの理解)

「ゼロから作るDeep Learning」の第7章、CNNを勉強したので、PythonではなくてC言語で1から実装してみたい。

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枚分作られるということになる。

f:id:msyksphinz:20180325002647p:plain
図. CIFAR-10の画像に対する畳み込みの適用イメージ。

と、ここまで頑張ってみたのは良いものの、C++に落とし込む時間がない... とりあえず今日はここまで...