تمهيد سريع للخبراء حول Tensorflow 2

إفتح المحتوى على موقع TensorFlow.org تفاعل مع المحتوى على Google Colab اعرض المصدر على Github نزّل الدّفتر

هذا الملفّ هو دفتر Google Colaboratory . بواسطته ، يمكنك تشغيل برامج Python مباشرة في المتصفّح - و هي طريقة رائعة لتعلّم و اِستخدام Tensorflow.

لمتابعة هذا البرنامج التعليمي ، قم بتشغيل الدفتر التّفاعلي في Google Colab بالنقر فوق الزر، ذي نفس التسمية ، الموجود في أعلى هذه الصفحة.

  1. في Colab ، اتصل بمحرّك تشغيل Python بالطريقة التّالية: إذهب إلى قائمة الإختيارات في أعلى يسار الدفتر ، ثمّ إضغط على CONNECT.
  2. شغّل كافة خلايا الدفتر التّفاعلي بإختيار Runtime ثمّ الضغط على Run all.

قم بتنزيل وتثبيت TensorFlow 2. ثمّ قم بإستيراد حزمة TensorFlow في برنامجك:

اِسترد حزمة Tensorflow في برنامجك

import tensorflow as tf

from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model

قم بتحميل و إعداد مجموعة بيانات 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]
x_test = x_test[..., tf.newaxis]
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step

اِستخدم الدّالة tf.data لخلط مجموعة البيانات عشوائيًا ثمّ توزيعها على دفعات ، كل منها متكوّن من 32 مثالاً :

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)

قم ببناء نموذج tf.keras باستخدام الفئات الفرعية للنماذج (model subclassing API) الموجودة في واجهة برمجة 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()

لتدريب النموذج قم باختيار خوارزميّة تحسين (optimizer) و دالّة خسارة (loss function):

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

optimizer = tf.keras.optimizers.Adam()

حدّد المقاييس (metrics) لقياس مقدار الخسارة (loss) و مدى دقّة (accuracy) النّموذج. تُجمع قيم هذه المقاييس عبر فترات التّدريب (epochs) ثمّ تطبع النتيجة الجمليّة.

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

اِستخدم الدالّة tf.GradientTape لتدريب النموذج:

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

اِختبر النموذج:

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

  template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
  print(template.format(epoch+1,
                        train_loss.result(),
                        train_accuracy.result()*100,
                        test_loss.result(),
                        test_accuracy.result()*100))
WARNING:tensorflow:Layer my_model is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because its dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.

Epoch 1, Loss: 0.12905898690223694, Accuracy: 96.11666870117188, Test Loss: 0.06669019907712936, Test Accuracy: 97.77999877929688
Epoch 2, Loss: 0.04086775332689285, Accuracy: 98.7249984741211, Test Loss: 0.04994307830929756, Test Accuracy: 98.29000091552734
Epoch 3, Loss: 0.02109687030315399, Accuracy: 99.34166717529297, Test Loss: 0.048092763870954514, Test Accuracy: 98.5199966430664
Epoch 4, Loss: 0.013238450512290001, Accuracy: 99.53666687011719, Test Loss: 0.06461107730865479, Test Accuracy: 98.37999725341797
Epoch 5, Loss: 0.008653666824102402, Accuracy: 99.7249984741211, Test Loss: 0.06382381916046143, Test Accuracy: 98.47000122070312

الآن و بعد التّدريب، بلغت دقة النموذج في تصنيف الصور الموجودة في مجموعة البيانات المستخدمة في هذا المقال إلى %98 تقريبًا . لتعلّم المزيد ، اِقرأ الدروس التعليمية الأخرى على موقع TensorFlow.