
الكائن الرئيسي الذي يتم التلاعب به في Tensorflow هو الموتر. ما هي التنسورات ، وما هي التنسورات ، وما هي الخصائص التي لديهم وكيفية معالجتها ، اقرأ دليل الترجمة من tensorflow.org.
TensorFlow ، كما يوحي الاسم ، هي عبارة عن منصة لتحديد وتنفيذ العمليات الحسابية باستخدام التنسورات. الموتر هو تعميم المتجهات والمصفوفات إلى أبعاد أعلى. داخل TensorFlow ، يتم تمثيل tensors كصفيفات n-dimensional لأنواع البيانات الأساسية.
عند كتابة برنامج TensorFlow ، فإن الكائن الرئيسي الذي تتعامل معه وتمريره هو tf.Tensor
. تعمل برامج TensorFlow عن طريق إنشاء رسم بياني لكائنات tf.Tensor
تفصيليًا لكيفية حساب كل مَقَيِّم استنادًا إلى tf.Tensor
الأخرى المتاحة ، ثم تشغيل أجزاء من هذا الرسم البياني للحصول على نتائج الحساب.
tf.Tensor
لديه الخيارات التالية:
- نوع البيانات (
float32
أو float32
أو string
، على سبيل المثال) - أحجام (الشكل)
جميع عناصر الموتر لها نفس نوع البيانات ، وهي معروفة دائمًا. لا يمكن معرفة الأبعاد (عدد القياسات وحجم كل قياس) إلا جزئياً. تكون نتيجة معظم العمليات تنسورات بأحجام معروفة ، إذا كانت الأبعاد عند الإدخال معروفة تمامًا ، لكن في بعض الحالات ، من الممكن معرفة أبعاد الموتر فقط أثناء تنفيذ الرسم البياني.
الأنواع الرئيسية من التنسورات هي كما يلي:
tf.Variable
tf.constant
tf.placeholder
tf.SparseTensor
باستثناء tf.Variable
، لا تتغير قيمة الموتر ، أي في سياق تنفيذ واحد ، يمكن أن يكون للمنسق قيمة واحدة فقط. ومع ذلك ، يمكن أن يؤدي حساب نفس الموتر مرتين إلى إرجاع قيم مختلفة ؛ على سبيل المثال ، قد يكون الموتر نفسه نتيجة قراءة البيانات من القرص ، أو إنشاء رقم عشوائي.
مرتبة
ترتيب الكائن tf.Tensor
هو عدد أبعادها. المرادفات من رتبة هي النظام ، ودرجة ، والبعد . لاحظ أن الترتيب في TensorFlow ليس هو نفس ترتيب المصفوفة في الرياضيات. كما يوضح الجدول التالي ، يتوافق كل ترتيب في Tensorflow مع بعض الكيانات الرياضية:
المرتبة 0
يوضح المقتطف التالي إنشاء العديد من متغيرات الرتبة 0:
mammal = tf.Variable("Elephant", tf.string) ignition = tf.Variable(451, tf.int16) floating = tf.Variable(3.14159265359, tf.float64) its_complicated = tf.Variable(12.3 - 4.85j, tf.complex64)
ملاحظة: تعتبر السلسلة كائنًا فرديًا في TensorFlow ، وليست سلسلة أحرف. من الممكن أن يكون هناك عدد من الأوتار ، متجهات الصف ، إلخ.
المرتبة 1
لإنشاء كائن tf.Tensor
من المرتبة 1 ، يمكنك تمرير قائمة من العناصر كقيم أولية. على سبيل المثال:
mystr = tf.Variable(["Hello"], tf.string) cool_numbers = tf.Variable([3.14159, 2.71828], tf.float32) first_primes = tf.Variable([2, 3, 5, 7, 11], tf.int32) its_very_complicated = tf.Variable([12.3 - 4.85j, 7.5 - 6.23j], tf.complex64)
الرتب العليا
يتكون الترتيب 2 من كائن tf.Tensor
من صف واحد وعمود واحد على الأقل:
mymat = tf.Variable([[7],[11]], tf.int16) myxor = tf.Variable([[False, True],[True, False]], tf.bool) linear_squares = tf.Variable([[4], [9], [16], [25]], tf.int32) squarish_squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32) rank_of_squares = tf.rank(squarish_squares) mymatC = tf.Variable([[7],[11]], tf.int32)
التنسورات ذات الرتب العليا ، بالمثل ، تتكون من صفائف n-dimensional. على سبيل المثال ، عند معالجة الصور ، يتم استخدام العديد من التنسرات المرتبة 4 ، مع أبعاد تتوافق مع رقم المثال في الحزمة ، وارتفاع الصورة ، وعرض الصورة ، وقناة اللون.
my_image = tf.zeros([10, 299, 299, 3])
الحصول على tf.Tensor
كائن tf.Tensor
لتحديد ترتيب الكائن tf.Tensor
، استدعاء الأسلوب tf.rank
. على سبيل المثال ، تحدد الطريقة التالية برمجيًا ترتيب tf.Tensor
المحدد أعلاه:
r = tf.rank(my_image)
روابط لشرائح tf.Tensor
بما أن tf.Tensor
عبارة عن صفيف n من الأبعاد للخلايا ، للوصول إلى خلية واحدة في tf.Tensor
تحتاج إلى تحديد مؤشرات n.
بالنسبة إلى المراتب صفر (العددية) ، فهناك حاجة إلى فهارس ، لأن هذا الرقم مجرد رقم.
للحصول على الموتر الأول (الموجه) ، يمنحك تمرير فهرس واحد إمكانية الوصول إلى الرقم:
my_scalar = my_vector[2]
لاحظ أن الفهرس الذي تم تمريره إلى []
يمكن أن يكون بحد ذاته عددًا tf.Tensor
إذا كنت تريد تحديد عنصر ديناميكيًا من متجه.
بالنسبة للتنسرات من الرتبة 2 أو أعلى ، فإن الوضع أكثر إثارة للاهتمام. بالنسبة إلى tf.Tensor
المرتبة 2 ، تمرير عائد رقمين كما هو متوقع بواسطة العددية:
my_scalar = my_matrix[1, 2]
يؤدي تمرير رقم واحد إلى إرجاع عامل فرعي للمصفوفة كما يلي:
my_row_vector = my_matrix[2] my_column_vector = my_matrix[:, 3]
تدوين :
في بناء الجملة ، يتم استخدام تخصيص subarray في بيثون كـ "اترك هذا البعد وحده". هذا مفيد في التنسورات عالية المستوى ، لأنه يسمح بالوصول إلى subvectors والغواصات ، وحتى subtensors الأخرى.
أبعاد
أبعاد الموتر هي عدد العناصر في كل بعد. تستخدم وثائق TensorFlow ثلاثة اصطلاحات لوصف أبعاد الموتر: المرتبة والأبعاد وعدد الأبعاد. يوضح الجدول التالي مدى ارتباطها ببعضها البعض:
يمكن تمثيل الأحجام كقوائم / مجموعات بيثون للأعداد الصحيحة ، أو باستخدام
tf.TensorShape
.
الحصول على حجم الكائن tf.Tensor
هناك طريقتان للحصول على أبعاد tf.Tensor
. عند إنشاء رسم بياني ، يكون من المفيد في الغالب أن نسأل ما هو معروف بالفعل عن حجم الموتر. يمكن القيام بذلك عن طريق قراءة خاصية shape
للكائن tf.Tensor
. هذه الطريقة تقوم بإرجاع كائن TensorShape
، وهو وسيلة ملائمة.
تمثيلات بأحجام محددة جزئيًا (لأنه عند إنشاء رسم بياني ، لا يمكن معرفة جميع الأحجام بالكامل).
يمكنك أيضًا الحصول على tf.Tensor
الذي يمثل الأبعاد المحددة بالكامل tf.Tensor
أخرى في وقت التشغيل. يتم ذلك عن طريق tf.shape
. وبهذه الطريقة ، يمكنك إنشاء رسم بياني يعالج أحجام التنسورات عن طريق بناء التنسورات الأخرى وفقًا للأحجام الديناميكية للإدخال tf.Tensor
.
على سبيل المثال ، يمكنك إنشاء متجه للأصفار من نفس حجم عدد أعمدة المصفوفة المحددة:
zeros = tf.zeros(my_matrix.shape[1])
تغيير حجم tf.Tensor
عدد عناصر الموتر هو نتاج جميع قياساته. عدد العناصر العددية دائمًا 1
. نظرًا لأن العديد من الأحجام المختلفة يمكن أن تعطي نفس عدد العناصر ، فغالبًا ما يكون من المناسب تغيير حجم tf.Tensor
دون تغيير عناصره. يمكن القيام بذلك باستخدام tf.reshape
.
توضح الأمثلة التالية كيفية تغيير حجم الموتر:
rank_three_tensor = tf.ones([3, 4, 5]) matrix = tf.reshape(rank_three_tensor, [6, 10])
أنواع البيانات
بالإضافة إلى البعد ، تحتوي التنسورات على نوع بيانات. لا يمكن أن tf.Tensor
معين على أكثر من نوع بيانات واحد. ومع ذلك ، فمن الممكن إجراء تسلسل بنيات بيانات عشوائية في string
وتخزينها في tf.Tensor
.
يمكنك تحويل tf.Tensor
من نوع بيانات واحد إلى آخر باستخدام tf.cast
:
لعرض نوع بيانات tf.Tensor
، استخدم خاصية Tensor.dtype
.
عند إنشاء tf.Tensor
من كائن بيثون ، يمكنك اختياريا اختيار نوع البيانات. إذا لم تقم بذلك ، فسيحدد TensorFlow نوع البيانات الذي يمكن أن يمثل بياناتك. يقوم TensorFlow بتحويل أعداد بيثون الصحيحة إلى tf.int32
، tf.int32
العائمة إلى tf.float32
. في حالات أخرى ، يستخدم TensorFlow نفس القواعد مثل numpy عند تحويل المصفوفات.
تقييم الموتر
بمجرد إنشاء الرسم البياني الحسابي ، يمكنك تشغيل حساب ذلك
سوف تولد tf.Tensor
محددة واستخراج القيمة المخصصة لها. غالباً ما يكون هذا مفيدًا للتصحيح ، وكذلك بالنسبة لمعظم TensorFlow.
أسهل طريقة لتقييم Tensor هي استخدام طريقة Tensor.eval
. على سبيل المثال:
constant = tf.constant([1, 2, 3]) tensor = constant * constant print(tensor.eval())
طريقة eval
تعمل فقط عندما يكون tf.Session
الافتراضي tf.Session
. إرجاع Tensor.eval صفيف numpy مع نفس محتويات كـ tensor.
في بعض الأحيان يكون من المستحيل تقييم tf.Tensor
بدون سياق ، لأن قيمته قد تعتمد على معلومات ديناميكية غير متوفرة. على سبيل المثال ، لا يمكن تقييم التنسورات المعتمدة على placeholder
دون توفير قيمة placeholder
.
p = tf.placeholder(tf.float32) t = p + 1.0 t.eval()
يرجى ملاحظة أنه يمكنك استخدام أي tf.Tensor
، وليس فقط العنصر النائب.
تصاميم النماذج الأخرى قد تجعل tf.Tensor
أكثر صعوبة في التقييم. لا يمكن لـ TensorFlow أن يقيِّم مباشرة tf.Tensor
المعرَّفة داخل الدوال أو داخل بنى تدفق التحكم. إذا كان tf.Tensor
يعتمد على القيمة من قائمة الانتظار ، فلن تعمل نتيجة tf.Tensor
إلا عند وضع شيء ما في قائمة الانتظار ؛ خلاف ذلك ، فإن تقدير الموتر سوف يتجمد. عند العمل مع قوائم الانتظار ، تذكر الاتصال بـ tf.train.start_queue_runners
قبل تقييم أي tf.Tensor
.
بعد التحقق ، ستظهر الترجمة أيضًا على Tensorflow.org. إذا كنت ترغب في المشاركة في ترجمة وثائق موقع Tensorflow.org إلى اللغة الروسية ، يرجى الاتصال في رسالة شخصية أو تعليقات. هي موضع تقدير أي تصحيحات أو تعليقات.