Démarrage rapide de TensorFlow 2 pour les experts

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Voir sur TensorFlow.org Exécuter dans Google Colab Voir la source sur GitHub Télécharger le cahier

Il s'agit d'un fichier de bloc-notes Google Colaboratory . Les programmes Python sont exécutés directement dans le navigateur, un excellent moyen d'apprendre et d'utiliser TensorFlow. Pour suivre ce didacticiel, exécutez le bloc-notes dans Google Colab en cliquant sur le bouton en haut de cette page.

  1. Dans Colab, connectez-vous à un runtime Python : en haut à droite de la barre de menus, sélectionnez CONNECT .
  2. Exécutez toutes les cellules de code du bloc-notes : sélectionnez Runtime > Run all .

Téléchargez et installez TensorFlow 2. Importez TensorFlow dans votre programme :

Importez TensorFlow dans votre programme :

import tensorflow as tf
print("TensorFlow version:", tf.__version__)

from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
TensorFlow version: 2.8.0-rc1

Chargez et préparez le jeu de données 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].astype("float32")
x_test = x_test[..., tf.newaxis].astype("float32")

Utilisez tf.data pour regrouper et mélanger l'ensemble de données :

train_ds = tf.data.Dataset.from_tensor_slices(
    (x_train, y_train)).shuffle(10000).batch(32)

test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)

Construisez le modèle tf.keras à l'aide de l' API de sous -classement du modèle 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)

  def call(self, x):
    x = self.conv1(x)
    x = self.flatten(x)
    x = self.d1(x)
    return self.d2(x)

# Create an instance of the model
model = MyModel()

Choisissez un optimiseur et une fonction de perte pour l'entraînement :

loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

optimizer = tf.keras.optimizers.Adam()

Sélectionnez des métriques pour mesurer la perte et la précision du modèle. Ces métriques accumulent les valeurs sur des époques, puis impriment le résultat global.

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

Utilisez tf.GradientTape pour entraîner le modèle :

@tf.function
def train_step(images, labels):
  with tf.GradientTape() as tape:
    # training=True is only needed if there are layers with different
    # behavior during training versus inference (e.g. Dropout).
    predictions = model(images, training=True)
    loss = loss_object(labels, predictions)
  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

  train_loss(loss)
  train_accuracy(labels, predictions)

Testez le modèle :

@tf.function
def test_step(images, labels):
  # training=False is only needed if there are layers with different
  # behavior during training versus inference (e.g. Dropout).
  predictions = model(images, training=False)
  t_loss = loss_object(labels, predictions)

  test_loss(t_loss)
  test_accuracy(labels, predictions)
EPOCHS = 5

for epoch in range(EPOCHS):
  # Reset the metrics at the start of the next epoch
  train_loss.reset_states()
  train_accuracy.reset_states()
  test_loss.reset_states()
  test_accuracy.reset_states()

  for images, labels in train_ds:
    train_step(images, labels)

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

  print(
    f'Epoch {epoch + 1}, '
    f'Loss: {train_loss.result()}, '
    f'Accuracy: {train_accuracy.result() * 100}, '
    f'Test Loss: {test_loss.result()}, '
    f'Test Accuracy: {test_accuracy.result() * 100}'
  )
Epoch 1, Loss: 0.13306719064712524, Accuracy: 96.03833770751953, Test Loss: 0.0717063844203949, Test Accuracy: 97.68999481201172
Epoch 2, Loss: 0.04493752866983414, Accuracy: 98.61833190917969, Test Loss: 0.058997876942157745, Test Accuracy: 98.18000030517578
Epoch 3, Loss: 0.023821160197257996, Accuracy: 99.22000122070312, Test Loss: 0.0560370571911335, Test Accuracy: 98.30999755859375
Epoch 4, Loss: 0.014193248935043812, Accuracy: 99.50666809082031, Test Loss: 0.06797954440116882, Test Accuracy: 98.29999542236328
Epoch 5, Loss: 0.010457769967615604, Accuracy: 99.63666534423828, Test Loss: 0.08524733036756516, Test Accuracy: 97.83999633789062

Le classificateur d'images est maintenant formé à une précision d'environ 98 % sur cet ensemble de données. Pour en savoir plus, lisez les tutoriels TensorFlow .