#はじめに
この記事は個人の学習の記録です。
内容は以下の参考記事で、丁寧に詳しく書かれています。
皆様は以下を参考にしてください。
##実施時のメモ
上記のコードをGoogle Colaboratoryで実施した。
Colaboratoryは補完してくれて便利だ。
以下、ソースコードと見並べて参照することを前提としたメモ。
###MNISTデータを読み込む
keras.datasetsからmnist.load_data()を使って、訓練データ(60000個)、テストデータ(10000個)を読み込む。
なお、読み込んだデータx_train及びx_testの形状は以下の値を実行(評価)すればわかる。
x_train.shape
x_test.shape
###MNISTデータを加工する
28×28次元のデータを784次元のベクトルにrehsapeし、データの方をfloat32に修正する。
さらに、各値を255で割っている。
これは多分画像データの各ドットが0~255の値を取っているのを0~1の範囲に正規化する処理。
機械学習ではデータを標準化や正規化してから扱う。
[標準化と正規化]
(https://qiita.com/yShig/items/dbeb98598abcc98e1a57)
また、目的変数(y)がその大きさに意味をなさない変数であるため、目的変数の数値の大きさが結果に影響を与えないように、カテゴリカルデータ(one-hot表現)に変換。
※もちろんこれらの加工処理はtestデータに対しても行う。
x_train = x_train.reshape(60000,784).astype('float32')
x_train /= 255
y_train = keras.utils.to_categorical(y_train,10)
###モデルの構築
入力層と全結合層(=ここでは出力層)の2層からなるモデルを作っている。
入力層は784ノード。全結合層は結果を10分類したいので、ノードが10と指定されている。
また、出力層の活性化関数は教科書通りにsoftmaxを使用。
今回は誤差関数としてcategorical_crossentropyを使用。以下リンク先によると、カテゴリカルにした目的変数に対するクロスエントロピーを使用する場合はこれを使用するらしい。
- categorical_crossentropyについて
Keras Documentation:損失関数の利用方法
categorical_crossentropyを使う場合,目的値はカテゴリカルにしなければいけません.
-
クロスエントロピーとは?
交差エントロピー -
rmspropとは?
勾配の大きさに応じて 学習率を調整した(ミニバッチ)SGD。
最適化アルゴリズムに関しては、下記の記事が非常に参考になった。
【2020決定版】スーパーわかりやすい最適化アルゴリズム -損失関数からAdamとニュートン法-
また、こちらの記事も詳しそうなので後で読みたい。
Intro to optimization in deep learning: Momentum, RMSProp and Adam
###学習
epochs:エポックは1つのデータを何回繰り返して学習させるかの値
fit関数の引数についてはこちらを参考にした。