Yeni başlayanlar için TensorFlow 2 hızlı başlangıç

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

Bu kısa tanıtım, Keras'ı şu amaçlarla kullanır:

  1. Görüntüleri sınıflandıran bir sinir ağı oluşturun.
  2. Bu sinir ağını eğitin.
  3. Ve son olarak, modelin doğruluğunu değerlendirin.

Bu bir Google İşbirliği not defteri dosyasıdır. Python programları doğrudan tarayıcıda çalıştırılır; bu, TensorFlow'u öğrenmenin ve kullanmanın harika bir yoludur. Bu öğreticiyi takip etmek için, bu sayfanın üst kısmındaki düğmeyi tıklayarak not defterini Google Colab'da çalıştırın.

  1. Colab'de bir Python çalışma zamanına bağlanın: Menü çubuğunun sağ üst kısmında BAĞLAN öğesini seçin.
  2. Tüm not defteri kod hücrelerini çalıştırın : Runtime > Run all öğesini seçin.

TensorFlow 2'yi indirin ve kurun. TensorFlow'u programınıza aktarın:

import tensorflow as tf

MNIST veri setini yükleyin ve hazırlayın. Örnekleri tamsayılardan kayan noktalı sayılara dönüştürün:

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

Katmanları istifleyerek tf.keras.Sequential modelini oluşturun. Eğitim için bir optimize edici ve kayıp işlevi seçin:

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

Her örnek için model, her sınıf için bir " logits " veya " log-odds " puanları vektörü döndürür.

predictions = model(x_train[:1]).numpy()
predictions
array([[ 8.1478250e-01, -4.9710822e-01, -4.4540316e-04,  8.0338269e-02,
        -1.2498328e-01, -2.8269893e-01,  4.8158792e-01, -2.3113336e-01,
        -6.4444810e-02,  2.9273060e-01]], dtype=float32)

tf.nn.softmax işlevi, bu tf.nn.softmax her sınıf için "olasılıklara" dönüştürür:

tf.nn.softmax(predictions).numpy()
array([[0.2003022 , 0.05394346, 0.08864142, 0.09609938, 0.07826194,
        0.06684294, 0.14354272, 0.07038016, 0.08314615, 0.11883967]],
      dtype=float32)

losses.SparseCategoricalCrossentropy kaybı, bir losses.SparseCategoricalCrossentropy vektörü ve bir True indeksi alır ve her örnek için bir skaler kayıp verir.

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

Bu kayıp, gerçek sınıfın negatif log olasılığına eşittir: Modelin doğru sınıftan emin olması durumunda sıfırdır.

Bu eğitimsiz model rastgeleye yakın olasılıklar verir (her sınıf için 1/10), bu nedenle ilk kayıp -tf.math.log(1/10) ~= 2.3 yakın olmalıdır.

loss_fn(y_train[:1], predictions).numpy()
2.7054095
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])

Model.fit yöntemi, kaybı en aza indirmek için model parametrelerini ayarlar:

model.fit(x_train, y_train, epochs=5)
Epoch 1/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.2913 - accuracy: 0.9147
Epoch 2/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.1418 - accuracy: 0.9584
Epoch 3/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.1058 - accuracy: 0.9681
Epoch 4/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.0879 - accuracy: 0.9730
Epoch 5/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.0744 - accuracy: 0.9765
<tensorflow.python.keras.callbacks.History at 0x7fc99a051290>

Model.evaluate yöntemi, genellikle bir " Validation-set " veya " Test-set " üzerinde modellerin performansını kontrol eder.

model.evaluate(x_test,  y_test, verbose=2)
313/313 - 0s - loss: 0.0737 - accuracy: 0.9784
[0.07365398108959198, 0.9783999919891357]

Görüntü sınıflandırıcı artık bu veri kümesinde ~%98 doğruluk için eğitilmiştir. Daha fazla bilgi edinmek için TensorFlow eğitimlerini okuyun.

Modelinizin bir olasılık döndürmesini istiyorsanız, eğitilmiş modeli sarabilir ve softmax'ı buna ekleyebilirsiniz:

probability_model = tf.keras.Sequential([
  model,
  tf.keras.layers.Softmax()
])
probability_model(x_test[:5])
<tf.Tensor: shape=(5, 10), dtype=float32, numpy=
array([[1.7845143e-09, 6.2416250e-09, 8.8993971e-07, 5.0938579e-05,
        6.9239370e-10, 9.1531788e-08, 3.0702079e-12, 9.9993479e-01,
        1.6381224e-06, 1.1627582e-05],
       [1.6608839e-08, 6.1237602e-04, 9.9933952e-01, 4.5319266e-05,
        4.2082616e-14, 6.8845372e-07, 1.2797722e-08, 1.6431847e-12,
        2.0782168e-06, 2.8262946e-11],
       [1.3514825e-06, 9.9640971e-01, 1.8868307e-04, 2.4645233e-05,
        8.3467271e-04, 1.7597053e-05, 5.1044153e-05, 1.7571129e-03,
        6.8748201e-04, 2.7744498e-05],
       [9.9969614e-01, 3.3471906e-08, 1.3097884e-05, 3.4203765e-08,
        2.6330403e-07, 6.6318894e-06, 2.1209409e-04, 4.3179925e-06,
        1.5615402e-07, 6.7310575e-05],
       [4.4438386e-07, 5.8649330e-09, 6.7045465e-07, 6.9524458e-10,
        9.9840516e-01, 1.0503891e-07, 3.2713297e-07, 3.2584390e-05,
        3.4801921e-08, 1.5606619e-03]], dtype=float32)>