TensorFlow 2.0 Alpha : クイックスタート for beginners & experts (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/08/2019
* 本ページは、TensorFlow の本家サイトの TF 2.0 Alpha の以下のページを翻訳した上で
適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Get Started for beginners
始めるために、TensorFlow ライブラリを貴方のプログラムにインポートします :
from __future__ import absolute_import, division, print_function !pip install tensorflow-gpu==2.0.0-alpha0 import tensorflow as tf
MNIST データセットをロードして準備します。サンプルを整数から浮動小数点数に変換します :
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
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 0s 0us/step
層をスタックすることにより tf.keras.Sequential モデルを構築します。訓練に使用される optimizer と損失関数を選択します :
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, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
モデルを訓練して評価します :
model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test)
Epoch 1/5 60000/60000 [==============================] - 6s 102us/sample - loss: 0.2951 - accuracy: 0.9136 Epoch 2/5 60000/60000 [==============================] - 6s 104us/sample - loss: 0.1403 - accuracy: 0.9581 Epoch 3/5 60000/60000 [==============================] - 6s 104us/sample - loss: 0.1051 - accuracy: 0.9683 Epoch 4/5 60000/60000 [==============================] - 6s 106us/sample - loss: 0.0865 - accuracy: 0.9730 Epoch 5/5 60000/60000 [==============================] - 6s 105us/sample - loss: 0.0760 - accuracy: 0.9761 10000/10000 [==============================] - 1s 53us/sample - loss: 0.0732 - accuracy: 0.9773 [0.07319076844588854, 0.9773]
画像分類器は今ではこのデータセット上で ~98% 精度にまで訓練されました。
Get Started for experts
始めるために、TensorFlow ライブラリを貴方のプログラムにインポートします :
from __future__ import absolute_import, division, print_function !pip install tensorflow-gpu==2.0.0-alpha0 import tensorflow_datasets as tfds import tensorflow as tf from tensorflow.keras.layers import Dense, Flatten, Conv2D from tensorflow.keras import Model
MNIST データセットをロードして準備します。サンプルを整数から浮動小数点数に変換します :
dataset, info = tfds.load('mnist', with_info=True, as_supervised=True) mnist_train, mnist_test = dataset['train'], dataset['test']
def convert_types(image, label): image = tf.cast(image, tf.float32) image /= 255 return image, label
mnist_train = mnist_train.map(convert_types).shuffle(10000).batch(32) mnist_test = mnist_test.map(convert_types).batch(32)
Keras モデル subclassing API を使用して tf.keras モデルを構築します :
class MyModel(Model): def __init__(self): super(MyModel, self).__init__() self.conv1 = Conv2D(32, 3, activation='relu') self.flatten = Flatten() self.d1 = Dense(128, activation='relu') self.d2 = Dense(10, activation='softmax') def call(self, x): x = self.conv1(x) x = self.flatten(x) x = self.d1(x) return self.d2(x) model = MyModel()
訓練のための optimizer と損失関数を選択します :
loss_object = tf.keras.losses.SparseCategoricalCrossentropy() optimizer = tf.keras.optimizers.Adam()
モデルの損失と精度を計測するためにメトリクスを選択します。これらのメトリクスはエポックに渡る値を蓄積してそれから全体的な結果を表示出力します。
train_loss = tf.keras.metrics.Mean(name='train_loss') train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy') test_loss = tf.keras.metrics.Mean(name='test_loss') test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')
tf.GradientTape を使用してモデルを訓練します。
@tf.function def train_step(image, label): with tf.GradientTape() as tape: predictions = model(image) loss = loss_object(label, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss(loss) train_accuracy(label, predictions)
今はモデルをテストします :
@tf.function def test_step(image, label): predictions = model(image) t_loss = loss_object(label, predictions) test_loss(t_loss) test_accuracy(label, predictions)
EPOCHS = 5 for epoch in range(EPOCHS): for image, label in mnist_train: train_step(image, label) for test_image, test_label in mnist_test: test_step(test_image, test_label) template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}' print (template.format(epoch+1, train_loss.result(), train_accuracy.result()*100, test_loss.result(), test_accuracy.result()*100))
Epoch 1, Loss: 0.13459181785583496, Accuracy: 95.83833312988281, Test Loss: 0.07291291654109955, Test Accuracy: 97.62999725341797 Epoch 2, Loss: 0.08865689486265182, Accuracy: 97.25, Test Loss: 0.061469435691833496, Test Accuracy: 98.0 Epoch 3, Loss: 0.06655323505401611, Accuracy: 97.913330078125, Test Loss: 0.060823891311883926, Test Accuracy: 98.0633316040039 Epoch 4, Loss: 0.053039826452732086, Accuracy: 98.33457946777344, Test Loss: 0.060382179915905, Test Accuracy: 98.14749908447266 Epoch 5, Loss: 0.044199299067258835, Accuracy: 98.61166381835938, Test Loss: 0.06107776239514351, Test Accuracy: 98.18599700927734
画像分類器は今ではこのデータセット上で ~98% 精度にまで訓練されました。
以上