『Aidemy-AIアプリコース』受講記:19日目(CNNを用いた画像認識:基礎)

プログラミングスクール「Aidemy」を受講し、その体験記をコツコツ書いていこうと思います。
「Aidemy」の受講を検討している方、どんなことをするかイメージを持っていただければ幸いです。

自己紹介:
大卒。ITに関して無知識。
新卒で造船業:現場管理。転職を目指し「Aidemy」を受講。

8/6
<19日目>

<今日の学習内容>
11-1 : CNNを用いた画像認識の基礎(2h)

今日はCNNを用いた画像認識についてです。

CNNとは人間の脳の視覚野と似た構造を持つ畳み込み層を使って特徴抽出を行うニューラルネットワークです。
二次元のままデータを扱うことができるので画像認識において高い性能を発揮します。

また畳み込み層と共にプーリング層と言う、畳み込み層から得た情報を縮約する層も使います。

畳み込み層は入力データの一部分に注目し、その部分の特徴を調べる役割があります。
注目する特徴は自動的に学習できます。

プーリング層は、畳み込み層で得た情報を縮約しデータを小さくする役割があります。

これらを組み合わせて学習を行っていきます。

CNNにも調整しなくてはならないハイパーパラメーターがあります。

・filters(畳み込み層)
CNNではそれぞれの特徴に対し特徴マップと言うものを作るのですが、これはその特徴マップの数、つまり特徴の種類を決定します。

・kernel_size (畳み込み層)
これは特徴マップの大きさを決めます。
画像から切り取る大きさです。

・strides (畳み込み層)
これは特徴を抽出する間隔を決めます。
画像の中から、この範囲、この範囲、、、と少しずつずれながら特徴を抽出していくのですがその抽出していく範囲の移動距離のことです。

・padding (畳み込み層)
抽出して小さくなった画像の縮小を抑えるために周囲にピクセルを追加することを言います。

・pool_size (プーリング層)
縮約のサイズを決めます。

とざっくり説明しました。
ただ初見の僕的には難しいです。
書き方もほとんどが参考部分に書いてありプログラムを読むのが大変です。

from keras.layers import Activation, Conv2D, Dense, Flatten, MaxPooling2D
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical


model = Sequential()

model.add(Conv2D(input_shape=(28, 28, 1), 
                filters=32,
                kernel_size=(2, 2), 
                strides=(1, 1), 
                padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), 
                      strides=(1,1)))
model.add(Conv2D(filters=32, 
                kernel_size=(2, 2), 
                strides=(1, 1), 
                padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), 
                      strides=(1,1)))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('sigmoid'))
model.add(Dense(128))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('softmax'))

model.summary() 

こんな感じで様々な層を組み合わせてモデルを作っていきます。

なかなか理解が追いつきません笑
難しい。

それではまた明日!

この記事が気に入ったらサポートをしてみませんか?