Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Użyj XLA z funkcją tf

Zobacz na TensorFlow.org Uruchom w Google Colab Wyświetl źródło na GitHub

W tym samouczku model TensorFlow jest szkolony w zakresie klasyfikowania zestawu danych MNIST, w którym funkcja ucząca jest kompilowana przy użyciu XLA.

Najpierw załaduj TensorFlow i włącz przyspieszone wykonywanie.

import tensorflow as tf
tf.compat.v1.enable_eager_execution()

Następnie zdefiniuj niezbędne stałe i przygotuj zbiór danych MNIST.

# Size of each input image, 28 x 28 pixels
IMAGE_SIZE = 28 * 28
# Number of distinct number labels, [0..9]
NUM_CLASSES = 10
# Number of examples in each training batch (step)
TRAIN_BATCH_SIZE = 100
# Number of training steps to run
TRAIN_STEPS = 1000

# Loads MNIST dataset.
train, test = tf.keras.datasets.mnist.load_data()
train_ds = tf.data.Dataset.from_tensor_slices(train).batch(TRAIN_BATCH_SIZE).repeat()

# Casting from raw data to the required datatypes.
def cast(images, labels):
  images = tf.cast(
      tf.reshape(images, [-1, IMAGE_SIZE]), tf.float32)
  labels = tf.cast(labels, tf.int64)
  return (images, labels)
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step

Na koniec zdefiniuj model i optymalizator. W modelu zastosowano pojedynczą gęstą warstwę.

layer = tf.keras.layers.Dense(NUM_CLASSES)
optimizer = tf.keras.optimizers.Adam()

Zdefiniuj funkcję szkoleniową

W funkcji uczenia przewidywane etykiety uzyskuje się za pomocą warstwy zdefiniowanej powyżej, a następnie minimalizuje gradient straty za pomocą optymalizatora. Aby skompilować obliczenia przy użyciu XLA, umieść je wewnątrz tf.function z experimental_compile=True .

@tf.function(experimental_compile=True)
def train_mnist(images, labels):
    images, labels = cast(images, labels)

    with tf.GradientTape() as tape:
      predicted_labels = layer(images)
      loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
          logits=predicted_labels, labels=labels
      ))
    layer_variables = layer.trainable_variables
    grads = tape.gradient(loss, layer_variables)
    optimizer.apply_gradients(zip(grads, layer_variables))

Wytrenuj i przetestuj model

Po zdefiniowaniu funkcji szkoleniowej zdefiniuj model.

for images, labels in train_ds:
  if optimizer.iterations > TRAIN_STEPS:
    break
  train_mnist(images, labels)

Na koniec sprawdź dokładność:

images, labels = cast(test[0], test[1])
predicted_labels = layer(images)
correct_prediction = tf.equal(tf.argmax(predicted_labels, 1), labels)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print("Prediction accuracy after training: %s" % accuracy)
Prediction accuracy after training: tf.Tensor(0.8829, shape=(), dtype=float32)