Avvio rapido di TensorFlow 2 per principianti

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza l'origine su GitHub Scarica quaderno

Questa breve introduzione utilizza Keras per:

  1. Carica un set di dati predefinito.
  2. Crea un modello di apprendimento automatico della rete neurale che classifichi le immagini.
  3. Addestra questa rete neurale.
  4. Valutare l'accuratezza del modello.

Questo tutorial è un taccuino di Google Colaboratory . I programmi Python vengono eseguiti direttamente nel browser, un ottimo modo per imparare e utilizzare TensorFlow. Per seguire questo tutorial, esegui il notebook in Google Colab facendo clic sul pulsante nella parte superiore di questa pagina.

  1. In Colab, connettiti a un runtime Python: nella parte superiore destra della barra dei menu, seleziona CONNETTI .
  2. Esegui tutte le celle del codice del notebook: seleziona Runtime > Esegui tutto .

Imposta TensorFlow

Importa TensorFlow nel tuo programma per iniziare:

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

Se stai seguendo il tuo ambiente di sviluppo, anziché Colab , consulta la guida all'installazione per configurare TensorFlow per lo sviluppo.

Carica un set di dati

Caricare e preparare il set di dati MNIST . Converti i dati di esempio da numeri interi a numeri a virgola mobile:

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

Costruisci un modello di apprendimento automatico

Costruisci un modello tf.keras.Sequential impilando i livelli.

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

Per ogni esempio, il modello restituisce un vettore di punteggi logit o log-odds , uno per ogni classe.

predictions = model(x_train[:1]).numpy()
predictions
array([[ 0.2760778 , -0.39324787, -0.17098302,  1.2016621 , -0.03416392,
         0.5461229 , -0.7203061 , -0.41886678, -0.59480035, -0.7580608 ]],
      dtype=float32)

La funzione tf.nn.softmax converte questi logit in probabilità per ogni classe:

tf.nn.softmax(predictions).numpy()
array([[0.11960829, 0.06124588, 0.0764901 , 0.30181262, 0.08770514,
        0.15668967, 0.04416083, 0.05969675, 0.05006609, 0.04252464]],
      dtype=float32)

Definire una funzione di perdita per l'allenamento utilizzando losses.SparseCategoricalCrossentropy , che accetta un vettore di logit e un indice True e restituisce una perdita scalare per ogni esempio.

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

Questa perdita è uguale alla probabilità logaritmica negativa della classe vera: la perdita è zero se il modello è sicuro della classe corretta.

Questo modello non addestrato fornisce probabilità vicine a casuali (1/10 per ogni classe), quindi la perdita iniziale dovrebbe essere vicina a -tf.math.log(1/10) ~= 2.3 .

loss_fn(y_train[:1], predictions).numpy()
1.8534881

Prima di iniziare l'addestramento, configura e compila il modello utilizzando Keras Model.compile . Imposta la classe optimizer su adam , imposta la loss sulla funzione loss_fn definita in precedenza e specifica una metrica da valutare per il modello impostando il parametro metrics su accuracy .

model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])

Allena e valuta il tuo modello

Usa il metodo Model.fit per regolare i parametri del tuo modello e ridurre al minimo la perdita:

model.fit(x_train, y_train, epochs=5)
Epoch 1/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2950 - accuracy: 0.9143
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1451 - accuracy: 0.9567
Epoch 3/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.1080 - accuracy: 0.9668
Epoch 4/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0906 - accuracy: 0.9717
Epoch 5/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0749 - accuracy: 0.9761
<keras.callbacks.History at 0x7f062c606850>

Il metodo Model.evaluate verifica le prestazioni dei modelli, solitamente su un " Set di convalida " o " Set di test ".

model.evaluate(x_test,  y_test, verbose=2)
313/313 - 1s - loss: 0.0783 - accuracy: 0.9755 - 588ms/epoch - 2ms/step
[0.07825208455324173, 0.9754999876022339]

Il classificatore di immagini è ora addestrato con una precisione del 98% circa su questo set di dati. Per saperne di più, leggi i tutorial di TensorFlow .

Se vuoi che il tuo modello restituisca una probabilità, puoi avvolgere il modello addestrato e allegare ad esso il softmax:

probability_model = tf.keras.Sequential([
  model,
  tf.keras.layers.Softmax()
])
probability_model(x_test[:5])
<tf.Tensor: shape=(5, 10), dtype=float32, numpy=
array([[2.72807270e-08, 2.42517650e-08, 7.75602894e-06, 1.28684027e-04,
        7.66215633e-11, 3.54162950e-07, 3.04894151e-14, 9.99857187e-01,
        2.32766553e-08, 5.97762892e-06],
       [7.37396704e-08, 4.73638036e-04, 9.99523997e-01, 7.20633352e-07,
        4.54133671e-17, 1.42298268e-06, 5.96959016e-09, 1.23534145e-13,
        7.77225608e-08, 6.98619169e-16],
       [1.95462448e-07, 9.99295831e-01, 1.02249986e-04, 1.86699708e-05,
        5.65737491e-06, 1.12115902e-06, 5.32719559e-06, 5.22767776e-04,
        4.79981136e-05, 1.76624681e-07],
       [9.99649286e-01, 1.80224735e-09, 3.73612856e-05, 1.52324446e-07,
        1.30824594e-06, 2.82781020e-05, 6.99703523e-05, 3.30940424e-07,
        2.13184350e-07, 2.13106396e-04],
       [1.53770895e-06, 1.72272063e-08, 1.98980865e-06, 3.97882580e-08,
        9.97192323e-01, 1.10544443e-05, 1.54713348e-06, 2.81727880e-05,
        3.48721733e-06, 2.75991508e-03]], dtype=float32)>

Conclusione

Congratulazioni! Hai addestrato un modello di machine learning usando un set di dati predefinito usando l'API Keras .

Per ulteriori esempi di utilizzo di Keras, consulta i tutorial . Per saperne di più sulla creazione di modelli con Keras, leggi le guide . Se vuoi saperne di più sul caricamento e sulla preparazione dei dati, consulta i tutorial sul caricamento dei dati delle immagini o sul caricamento dei dati CSV .