ProgrammingLab

プログラミングに役立つ情報を更新!

ディープラーニングの流れをさらっと再確認しよう!!

ディープラーニングの理解がいまいちだったため、整理するために全体の流れをまとめます。
かるく勉強したことある人を対象としているので、理論・用語・ライブラリなどの説明は省きます。
サンプルでは簡単な画像分類の学習を載せています。
ライブラリはKerasを使っています。

サンプルを動かす条件

最後にサンプルを載せていますが、実行できるようにするためには以下の準備が必要です。
Python環境の構築
②必要ライブラリのインストール

①については以前に書いた以下の記事をご参照ください。
programming-lab.hatenadiary.com ②については①で構築した環境で以下のようにダウンロードしてください。

>conda install jupyter
>conda install tensorflow
>conda install keras

コーディングにはJupyterNotebookを使っています。
初めての方は以下の記事を参照してください。
programming-lab.hatenadiary.com 以上がそろえばサンプルコードが実行できる状態になります。

ディープラーニングの流れ

ディープラーニング全体の流れとしては以下のようになります。
1.データの前処理
2.ニューラルネットワークの作成
3.学習の設定
4.学習の実行
5.推論の実行

データの前処理

ニューラルネットワークに渡すデータの取得・加工を行う工程です。
〇やること
・学習用データの取得
・データの変形

ニューラルネットワークの作成

学習に使用するニューラルネットワークを作成します。
〇やること
・入力、中間、出力層の設定
・活性化関数の設定

学習の設定

学習する際に使う関数の設定などを行います。
〇やること
・損失関数(誤差関数)の設定
・最適化アルゴリズムの設定

学習の実行

作成したネットワークで学習を開始します。
〇やること
・バッチサイズ、エポック数等の設定

推論の実行

テストデータを使って学習がうまく進んでいるかをテストします。

サンプルコード

サンプルコードの全容を載せておきます。

#===================================
#インポート
#===================================
#数値演算用ライブラリ
import numpy as np

#Keras
from keras.layers import Input, Flatten, Dense
from keras.models import Model
from keras.optimizers import Adam
from keras.utils import to_categorical

#今回の学習データ取得に必要
from keras.datasets import cifar10

#===================================
#データの前処理
#===================================
#分類数
NUM_CLASSES = 10

#データ取得
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

#0~255のデータを0~1のfloat32型のデータに変形
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

//正解ラベルデータをOnHot表現に変換
y_train = to_categorical(y_train, NUM_CLASSES)
y_test = to_categorical(y_test, NUM_CLASSES)

#OnHot表現とは
#5種類のデータがある場合で2番目が正解だった場合
#通常1というデータが入っているが、OnHot表現に直すと
#(0,1,0,0,0)というベクトルになる

#===================================
#ニューラルネットワークのモデル作成
#===================================
#入力層
input_layer = Input((32,32,3))

#入力データを平坦化
x = Flatten()(input_layer)

#全結合層を2つ重ねる
#活性化関数はReLU
x = Dense(200, activation = 'relu')(x)
x = Dense(150, activation = 'relu')(x)

#出力数が分類の数になるように最後の層を設定
#活性化関数は出力を確率にするためソフトマックス関数
output_layer = Dense(NUM_CLASSES, activation = 'softmax')(x)

#モデルを作成
model = Model(input_layer, output_layer)

#===================================
#学習の設定
#===================================
#最適化アルゴリズムにAdamを使用。
opt = Adam(lr=0.0005)
#損失関数は交差エントロピー
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

#===================================
#学習
#===================================
model.fit(x_train
          , y_train
          , batch_size=32
          , epochs=10
          , shuffle=True)#データをシャッフルする

#===================================
#推論
#===================================
model.evaluate(x_test, y_test)

まとめ

ディープラーニングの流れをさらっと一通り見ていきました。
今回載せているサンプルはすべて全結合層を使った簡単な実装です。
3エポック学習した結果、正答率は50%程度でした。
画像解析の場合はCNNを使うとさらに正答率が上がりますが、今回はシンプルさを重視しました。