畳み込みニューラルネットワーク(人工知能)の仕組み

ゆうき( @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"))
畳み込みニューラルネットワークの仕組み1
(PowerPointで作成)

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))
畳み込みニューラルネットワークの仕組み2
(PowerPointで作成)

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"))
畳み込みニューラルネットワークの仕組み3
(PowerPointで作成)

まず,Flatten() を使うことで,複数の次元のデータを一次元に変換します.

そして,Dense(512)で出力結果を512個のデータにします.

最後に,Activation(“softmax”)と書くことで,上の図の場合,画像を判定します.

このような仕組みで畳み込みニューラルネットワークが作られています.

終わりに

今回は,畳み込みニューラルネットワークの仕組みについて解説しました.

畳み込みニューラルネットワークの仕組みを知ベることで,

人工知能がどのようなものなのかをおおまかに理解できました.

今回解説した内容に間違いがある場合,以下のQ &Aで教えて頂けると助かります。

お手数をおかけしますが,よろしくお願いいたします。⤵

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA