Pomoc chronić Wielkiej Rafy Koralowej z TensorFlow na Kaggle Dołącz Wyzwanie

Krótkie wprowadzenie do TensorFlow 2 dla początkujących

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

To krótkie wprowadzenie wykorzystuje Kerasa do:

  1. Załaduj gotowy zestaw danych.
  2. Zbuduj model uczenia maszynowego sieci neuronowej, który klasyfikuje obrazy.
  3. Trenuj tę sieć neuronową.
  4. Oceń dokładność modelu.

Ten samouczek to notatnik Google Colaboratory . Programy w Pythonie są uruchamiane bezpośrednio w przeglądarce — to świetny sposób na naukę i korzystanie z TensorFlow. Aby skorzystać z tego samouczka, uruchom notatnik w Google Colab, klikając przycisk u góry tej strony.

  1. W Colab połącz się ze środowiskiem wykonawczym Pythona: w prawym górnym rogu paska menu wybierz POŁĄCZ .
  2. Uruchom wszystkie komórki kodu notatnika: Wybierz Runtime > Uruchom wszystko .

Skonfiguruj TensorFlow

Zaimportuj TensorFlow do swojego programu, aby rozpocząć:

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

Jeśli podążasz za własnym środowiskiem programistycznym, a nie Colab , zapoznaj się z przewodnikiem instalacji, aby skonfigurować TensorFlow do programowania.

Załaduj zbiór danych

Załaduj i przygotuj zestaw danych MNIST . Przekształć przykładowe dane z liczb całkowitych na liczby zmiennoprzecinkowe:

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
11501568/11490434 [==============================] - 0s 0us/step

Zbuduj model uczenia maszynowego

Zbuduj model tf.keras.Sequential , układając warstwy.

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

Dla każdego przykładu model zwraca wektor wyników logit lub log-odds , po jednym dla każdej klasy.

predictions = model(x_train[:1]).numpy()
predictions
array([[ 0.74148655, -0.39261633,  0.08016336, -0.46431944,  0.21458861,
         0.31183302,  0.7555975 ,  0.80728006, -0.6296631 , -0.4926056 ]],
      dtype=float32)

Funkcja tf.nn.softmax konwertuje te logity na prawdopodobieństwa dla każdej klasy:

tf.nn.softmax(predictions).numpy()
array([[0.16651046, 0.05356818, 0.08594736, 0.04986165, 0.09831339,
        0.10835411, 0.16887674, 0.1778342 , 0.04226285, 0.04847102]],
      dtype=float32)

Zdefiniuj funkcję straty do uczenia przy użyciu losses.SparseCategoricalCrossentropy , która pobiera wektor logit i indeks True i zwraca stratę skalarną dla każdego przykładu.

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

Ta strata jest równa ujemnemu logarytmicznemu prawdopodobieństwu prawdziwej klasy: Strata wynosi zero, jeśli model jest pewien, że klasa jest prawidłowa.

Ten niewytrenowany model daje prawdopodobieństwa bliskie losowości (1/10 dla każdej klasy), więc początkowa strata powinna być bliska -tf.math.log(1/10) ~= 2.3 .

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

Przed rozpoczęciem szkolenia skonfiguruj i skompiluj model za pomocą Keras Model.compile . Ustaw klasę optimizer na adam , ustaw loss na zdefiniowaną wcześniej funkcję loss_fn i określ metrykę do oceny dla modelu, ustawiając parametr metrics na accuracy .

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

Trenuj i oceniaj swój model

Użyj metody Model.fit , aby dostosować parametry modelu i zminimalizować straty:

model.fit(x_train, y_train, epochs=5)
Epoch 1/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2956 - accuracy: 0.9137
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1430 - accuracy: 0.9572
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1059 - accuracy: 0.9682
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0870 - accuracy: 0.9736
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0732 - accuracy: 0.9774
<keras.callbacks.History at 0x7fabfe6f6cd0>

Metoda Model.evaluate sprawdza wydajność modeli, zwykle na „ zestawie walidacyjnym ” lub „ zestawie testowym ”.

model.evaluate(x_test,  y_test, verbose=2)
313/313 - 0s - loss: 0.0771 - accuracy: 0.9756
[0.07707860320806503, 0.975600004196167]

Klasyfikator obrazu jest teraz wyszkolony do ~98% dokładności w tym zestawie danych. Aby dowiedzieć się więcej, przeczytaj samouczki TensorFlow .

Jeśli chcesz, aby Twój model zwracał prawdopodobieństwo, możesz zawinąć wytrenowany model i dołączyć do niego 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([[9.35628634e-07, 1.90160367e-08, 2.08603578e-05, 3.36712168e-04,
        3.99928729e-10, 3.29815066e-07, 1.11730861e-12, 9.99547541e-01,
        5.78590800e-07, 9.29015441e-05],
       [9.06768847e-08, 1.75887300e-03, 9.98239040e-01, 1.42416525e-06,
        2.24498985e-14, 1.93019602e-07, 4.19461571e-07, 1.78353019e-14,
        1.09490275e-08, 3.30677152e-15],
       [1.80358853e-07, 9.99705374e-01, 4.36524460e-05, 7.87066620e-06,
        6.60410151e-05, 1.29832119e-06, 2.66996949e-06, 5.51502962e-05,
        1.15344104e-04, 2.45894512e-06],
       [9.99937892e-01, 1.82150364e-10, 2.67099913e-05, 1.87603248e-07,
        2.81131548e-07, 1.86480634e-06, 2.33697901e-05, 1.97653662e-07,
        3.29448504e-08, 9.38197445e-06],
       [1.53162068e-06, 2.57238808e-09, 2.05853598e-06, 2.75526531e-07,
        9.93477166e-01, 2.57349512e-07, 3.59538944e-06, 9.20545644e-05,
        1.77590653e-06, 6.42123120e-03]], dtype=float32)>

Wniosek

Gratulacje! Wytrenowano model uczenia maszynowego przy użyciu gotowego zestawu danych przy użyciu interfejsu API Keras .

Więcej przykładów korzystania z Keras znajdziesz w samouczkach . Aby dowiedzieć się więcej o budowaniu modeli za pomocą Keras, przeczytaj przewodniki . Jeśli chcesz dowiedzieć się więcej o ładowaniu i przygotowywaniu danych, zapoznaj się z samouczkami dotyczącymi ładowania danych obrazu lub ładowania danych CSV .