Registration is open for TensorFlow Dev Summit 2020 Learn more

エキスパートのための TensorFlow 2.0 入門

View on Run in Google Colab View source on GitHub Download notebook

このファイルは Google Colaboratory の notebook ファイルです。 Python プログラムはブラウザ上で直接実行されます。TensorFlow を学んだり使ったりするには最良の方法です。Google Colab の notebook の実行方法は以下のとおりです。

  1. Python ランタイムへの接続:メニューバーの右上で「接続」を選択します。
  2. ノートブックのコードセルをすべて実行:「ランタイム」メニューから「すべてのセルを実行」を選択します。

TensorFlow 2 のパッケージをダウンロードしてインストールします。

プログラムに TensorFlow をインポートします。

from __future__ import absolute_import, division, print_function, unicode_literals

import tensorflow as tf

from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model

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

# Add a channels dimension
x_train = x_train[..., tf.newaxis]
x_test = x_test[..., tf.newaxis]
Downloading data from
11493376/11490434 [==============================] - 0s 0us/step

データセットをシャッフルし、バッチ化するために を使います。

train_ds =
    (x_train, y_train)).shuffle(10000).batch(32)

test_ds =, y_test)).batch(32)

Kerasの model 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()


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')


def train_step(images, labels):
  with tf.GradientTape() as tape:
    predictions = model(images)
    loss = loss_object(labels, predictions)
  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

  train_accuracy(labels, predictions)


def test_step(images, labels):
  predictions = model(images)
  t_loss = loss_object(labels, predictions)

  test_accuracy(labels, predictions)

for epoch in range(EPOCHS):
  for images, labels in train_ds:
    train_step(images, labels)

  for test_images, test_labels in test_ds:
    test_step(test_images, test_labels)

  template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
  print (template.format(epoch+1,
  # 次のエポック用にメトリクスをリセット
WARNING:tensorflow:Layer my_model is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because it's dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.

Epoch 1, Loss: 0.13199351727962494, Accuracy: 96.0566635131836, Test Loss: 0.0695941224694252, Test Accuracy: 97.68000030517578
Epoch 2, Loss: 0.042124178260564804, Accuracy: 98.69833374023438, Test Loss: 0.05947713181376457, Test Accuracy: 98.00999450683594
Epoch 3, Loss: 0.022719349712133408, Accuracy: 99.27166748046875, Test Loss: 0.06400875747203827, Test Accuracy: 98.25
Epoch 4, Loss: 0.014790628105401993, Accuracy: 99.48500061035156, Test Loss: 0.05856180191040039, Test Accuracy: 98.41999816894531
Epoch 5, Loss: 0.009228138253092766, Accuracy: 99.67166900634766, Test Loss: 0.056094978004693985, Test Accuracy: 98.45999908447266

この画像分類器は、今回のデータセットで訓練した場合、最大98%程度の正解率となります。更に学ぶには TensorFlow tutorials を読んでください。