جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
تعلم الآلة والذكاء الاصطناعي - الدرس 8
التنفيذ الفوري (Eager Execution)، المصفوفات الموترة (Tensors)، والاشتقاق التلقائي
tf.keras هي الآن الواجهة البرمجية عالية المستوى الموصى بها لبناء النماذجCPU وGPU وTPU والأجهزة المحمولة؛ وتدعم التدريب الموزعimport tensorflow as tf
print("TensorFlow Version:", tf.__version__)
print("Is GPU available?:", tf.config.list_physical_devices('GPU'))| البنية | الوصف |
|---|---|
tf.Tensor | مصفوفة موترة غير قابلة للتغيير متعددة الأبعاد - البنية الأساسية للبيانات |
tf.Variable | مصفوفة موترة قابلة للتغيير، تستخدم لتخزين المعاملات القابلة للتدريب |
tf.TensorArray | مصفوفة من المصفوفات الموترة بحجم ديناميكي، تستخدم في الشبكات المتكررة (RNN) |
tf.RaggedTensor | مصفوفات موترة بأطوال صفوف متغيرة |
tf.SparseTensor | تخزين فعال للبيانات التي غالبيتها أصفار |
tf.Tensor: الرتب والأشكالالرتبة 0
عددي (Scalar) - بدون محاور
الرتبة 1
متجه (Vector) - محور واحد
الرتبة 2
مصفوفة (Matrix) - محوران
الرتبة 3+
تنسور متعدد المحاور
rank_0 = tf.constant(4)
rank_1 = tf.constant([2.0, 3.0, 4.0])
rank_2 = tf.constant([[1, 2], [3, 4], [5, 6]], dtype=tf.float16).shape تعطي الحجم على طول كل محور؛ و.dtype تعطي نوع بيانات العنصرNumPy عبر tensor.numpy() أو np.array(tensor)tensor = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
tensor.shape # (2, 2)
tensor.dtype # float32
tensor[0, 0] # element access
tensor[:, 0] # slicingtf.Variable: الحالة القابلة للتغييرtf.VariableTensor) غير قابلة للتغيير؛ وأوزان النموذج تحتاج إلى التغيير - ولهذا وجدت Variablevar = tf.Variable([[5.0, 6.0], [7.0, 8.0]])
var.assign([[1, 2], [3, 4]]) # replace values
var.assign_add([[1, 1], [1, 1]]) # increment in placeRaggedTensor وSparseTensortf.RaggedTensorragged = tf.ragged.constant([[1, 2], [3, 4, 5], [6]])tf.SparseTensorsparse = tf.SparseTensor(indices=[[0,3],[2,4]], values=[10,20], dense_shape=[3,10])
tf.sparse.to_dense(sparse)tf.add، tf.subtract، tf.multiply، tf.dividetf.linalg.matmul، .det، .inv، .eig، .svdA = tf.constant([[2.0, 3.0], [1.0, 4.0]])
B = tf.constant([[1.0, 2.0], [3.0, 4.0]])
tf.linalg.matmul(A, B)tf.random.normal([3, 3], mean=0.0, stddev=1.0)
tf.random.uniform([2, 2], minval=0, maxval=10)
tf.random.set_seed(42) # reproducibilitytf.reduce_meantf.reduce_meanx = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
tf.reduce_mean(x) # 3.5 (all elements)
tf.reduce_mean(x, axis=0) # [2.5 3.5 4.5] (column means)
tf.reduce_mean(x, axis=1) # [2. 5.] (row means)tf.function@tf.functionدالة Python
تتبع (Tracing)
الاستدعاء الأول
بناء رسم بياني حسابي
تنفيذ الرسم البياني
الاستدعاءات اللاحقة - أسرع
@tf.function
def computation_graph(x1, x2):
return (x1 + x2) - (x1 * x2)GradientTapetf.GradientTape()، ثم استدع .gradient()عمليات على تنسورات
تسجل داخل tf.GradientTape()
استدعاء .gradient()
التدرج (Gradient)
y = x ** 3 عند x = 2.0، فما dy/dx؟x = tf.Variable(2.0)
with tf.GradientTape() as tape:
y = x ** 3
dy_dx = tape.gradient(y, x) # 12.0, since d/dx(x^3) = 3x^2tf.Tensor غير قابلة للتغيير؛ وtf.Variable هي الحاوية القابلة للتغيير للمعاملات القابلة للتدريب@tf.function تجمع كود بايثون في رسم بياني لتحقيق مكاسب أداء كبيرةtf.GradientTape يشغل الاشتقاق التلقائي، وهو جوهر تدريب النماذجtf.keras في كل ما تقوم به على مستوى أعلىMahmoud Abas|مقدمة في TensorFlow 2.x