
ゆうき( @BASEBALLY15 )です^^
畳み込みニューラルネットワーク(CNN)の勉強をしているのですが,仕組みがよく分かりません・・・
コードを書きこむだけでは,なかなか理解できないですよね(-_-;)
そうなんですよね.
コードを書くだけでは,なかなか理解できないです(・・;)
畳み込みニューラルネットワーク(CNN)の仕組みを教えてください・・・
分かりました.
それでは,今回は,畳み込みニューラルネットワーク(CNN)の仕組みについてご紹介します^^

目次
畳み込みニューラルネットワーク(CNN)とは?
畳み込みニューラルネットワークを解説する前に,そもそも『ニューラルネットワーク』とは何なのか?
ニューラルネットワークとは,簡単に言うと,人間の脳機能の特性を数理的に表したモデルのことです.
そして,このモデルを何層にも重ねたものを『畳み込みニューラルネットワーク(CNN)』といいます.
今までに,畳み込みニューラルネットワーク(CNN)を使った作品
・キャベツとレタスを判定してみた
・花言葉を判定してみた
・自分の顔画像と他人の顔画像を判定してみた
Python 畳み込みニューラルネットワークのコード
#------------------------------------------------
model = Sequential()
model.add(Conv2D(32,
kernel_size=(3,3),
padding="same",
input_shape=(50, 50, 3)))
#マイナスの値を除去
model.add(Activation("relu"))
#------------------------------------------------
model.add(Conv2D(32,
kernel_size=(3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
#過学習の抑制(ランダムでニューロンを無効化)
#偏ったニューロンに依存しないため
model.add(Dropout(rate=0.25))#25%無効化
#------------------------------------------------
model.add(Conv2D(64,
kernel_size=(3,3),
padding="same"))
model.add(Activation("relu"))
#------------------------------------------------
model.add(Conv2D(64,
kernel_size=(3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
#------------------------------------------------
model.add(Flatten())
model.add(Dense(512))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(num_face_classes))
model.add(Activation("softmax"))
#------------------------------------------------
このコードを見ても,「いったい,何を表しているの?」と思うのではないでしょうか?
そこで,今回は,このコードが何を表しているのかを解説していきます^^
畳み込みニューラルネットワークって,こんな仕組みなんだ!?
Conv2D,padding,reluとは?
まずは,以下のコードについて解説します.
model = Sequential()
model.add(Conv2D(32,
kernel_size=(3,3),
padding="same",
input_shape=(50, 50, 3)))
#マイナスの値を除去
model.add(Activation("relu"))

50×50×3のデータを3×3のフィルター32枚にかけます.
その際に,padding=”same”と書くことで,データの周りに0を並べて,出力のサイズを同じにします.
そして,Activation=(“relu”)で,マイナスの値は0にして,0以上の数字はそのまま表します.
これによって,取り出された特徴をより強調させる働きがあります.
MaxPooling,Dropoutとは?
次に,MaxPoolongとDropoutについて解説します.
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(rate=0.25))

MaxPooling2D(pool_size=(2,2)で,2×2のサイズ内で最大値をとり,それを並べていきます.
そして,Dropout(rate=0.25)で,全データの25%を無効化します.
例えば,10万個のデータがあれば,その内の2万5千個のデータを無効化します.
これによって,過学習を抑制することが出来ます.
Flatten,Dense,softmaxとは?
最後に,FlattenとDenseとsoftmaxについて解説します.
model.add(Flatten())
model.add(Dense(512))
model.add(Activation("softmax"))

まず,Flatten() を使うことで,複数の次元のデータを一次元に変換します.
そして,Dense(512)で出力結果を512個のデータにします.
最後に,Activation(“softmax”)と書くことで,上の図の場合,画像を判定します.
このような仕組みで畳み込みニューラルネットワークが作られています.
終わりに
今回は,畳み込みニューラルネットワークの仕組みについて解説しました.
畳み込みニューラルネットワークの仕組みを知ベることで,
人工知能がどのようなものなのかをおおまかに理解できました.
今回解説した内容に間違いがある場合,以下のQ &Aで教えて頂けると助かります。
お手数をおかけしますが,よろしくお願いいたします。⤵