In [ ]:
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
このガイドでは簡単な導入として、Keras を使って次のことを行います。
このファイルは の notebook ファイルです。 Python プログラムはブラウザ上で直接実行されます。TensorFlow を学んだり使ったりするには最良の方法です。Google Colab のnotebook の実行方法は以下のとおりです。
In [ ]:
import tensorflow as tf
ではなく独自の開発環境で手順を実行している場合は、開発用 TensorFlow のセットアップについて、インストールガイドをご覧ください。
注意: 独自の開発環境を使用している場合は、TensorFlow 2 パッケージをインストールする際に、最新の pip
にアップグレード済みであることを確認してください。詳細は、インストールガイドをご覧ください。
MNIST データセットを読み込んで準備します。画像のピクセル値は 0~255 です。値を 255.0
で割って、0~1 の範囲に変換しましょう。また、この操作によって、サンプルデータが整数から浮動小数点にも変換されます。
In [ ]:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
In [ ]:
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
In [ ]:
predictions = model(x_train[:1]).numpy()
predictions
tf.nn.softmax
関数は、クラスごとにこれらのロジットを "probabilities" に変換します。
In [ ]:
tf.nn.softmax(predictions).numpy()
注意: この tf.nn.softmax
をネットワークの最後のレイヤーのアクティベーション関数として組み込むことも可能です。こうすることでモデルの出力をより直接的に解釈可能にすることもできますが、softmax 出力を使用する場合、すべてのモデルに対して正確で数値的に安定した損失計算を提供することは不可能であるため、この方法は推奨されません。
losses.SparseCategoricalCrossentropy
を使用して、トレーニングの損失関数を定義します。
In [ ]:
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
損失関数は、グラウンドトゥルース値のベクトルとロジットのベクトルを取り、サンプルごとにスカラー損失を返します。この損失は true クラスの負の対数確率と同等です。モデルが確実に正しいクラスである場合、損失はゼロとなります。
トレーニングされていないこのモデルでは、ランダムに近い確率(クラス当たり 1/10)が得られるため、最初の損失は -tf.math.log(1/10) ~= 2.3
に近くなります。
In [ ]:
loss_fn(y_train[:1], predictions).numpy()
トレーニングを開始する前に、Keras Model.compile
を使用してモデルの構成とコンパイルを行います。optimizer
クラスを adam
に、loss
を前に定義した loss_fn
関数に設定し、metrics
パラメータを accuracy
に設定して評価するモデルの指標を指定します。
In [ ]:
model.compile(optimizer='adam',
loss=loss_fn,
metrics=['accuracy'])
In [ ]:
model.fit(x_train, y_train, epochs=5)
In [ ]:
model.evaluate(x_test, y_test, verbose=2)
tf.nn.softmax
関数はクラスごとにこれらのロジットを "確率" に変換します。
モデルが確率を返すようにするには、トレーニング済みのモデルをラップして、それに softmax を接続することができます。
In [ ]:
probability_model = tf.keras.Sequential([
model,
tf.keras.layers.Softmax()
])
In [ ]:
probability_model(x_test[:5])
おめでとうございます!事前構築済みのデータセットと Keras API を使用して、機械学習モデルをトレーニングしました。
Keras のその他の使用例については、チュートリアルをご覧ください。Keras を使ったモデルの構築に関してさらに学習するには、ガイドをお読みください。データの読み込みと準備についてさらに学習するには、画像データの読み込みまたは CSV データの読み込みに関するチュートリアルをご覧ください。