では、さっそくレイヤーを見ていきます。
tf.keras.layers.Flatten()
まずはtf.keras.layers.Flatten()
です。
これは、多次元配列を1次元の配列に変換する事ができます。
どういうことかというと、例えば今回のような画像を読み込む場合は、縦と横の2次元配列です。
ですが、多くの機械学習モデルは1次元のデータを要求しています。
これを解決するために使用するレイヤーです。
input_shape=(28, 28)
というものが渡されています。
これは入力データの形状をしています。
先程みたデータセットでは28×28ピクセルの画像だったはずです。
これで、入力値として28×28の画像を渡す事ができます!
tf.keras.layers.Dense(128, activation='relu')
次はtf.keras.layers.Dense(128, activation='relu')
です。
Dense
レイヤーは全結合層を作るために使用する。
全結合層はニューラルネットワークを構成するレイヤーの中でも基本的なレイヤーの一つであり、このレイヤーに入力されたデータのすべてのユニットが次の層のすべてのユニットと結合されます。
Dense(128, activation='relu')
のうち、128は、このレイヤーに渡されたユニットを結合した上で128個のユニットに変換する、という意味です。
activation='relu'
は、活性化関数として、ReLU関数
を使用するように指定しています。
活性化関数とは、ユニットの出力がどのようにして入力から変換されるのかを決めるための重要な役割です。
今回使用するReLU関数
とは、入力が0以下の場合に0を出力し、入力が0より大きい場合はそのままの値を出力する関数です。
tf.keras.layers.Dense(10)
最後にtf.keras.layers.Dense(10)
です!
これは先程解説した全結合層です。
しかし、活性化関数を指定していません。
この場合、デフォルトとして、線形活性化関数
というものが指定されます。
線形活性化関数は入力値をそのまま出力します。
このようなレイヤーは主に分類問題の最後の出力レイヤーとして使用されます。
今回は128個のユニットを10個のユニットに変換しています。
10個である理由は、今回は10種類の中から画像を分類するためです。
以上でモデルのレイヤー設定は終了です。
今回は隠れ層等も使用しない単純なモデル構造であることがわかりましたか?