عامر ابراهيم نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 لم أفهم الاختلاف بين نطاق الاسم name scope والنطاق المتغير variable scope في Tensorflow؟ هل من الممكن أن يتم توضيحه؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 أولاً سأبدأ بهذه الملاحظة: اعتباراً من الإصدار 0.11 ، تم إهمال كل من op_scope و variable_op_scope واستبدالهما بـ name_scope و variable_scope. دعنا نتكلم أولاً عن مفهوم ال variable sharing في TensorFlow: هو آلية تسمح لنا بمشاركة المتغيرات التي يتم الوصول إليها في أجزاء مختلفة من الكود دون تمرير مراجع إلى المتغير. يمكننا استخدام الطريقة tf.get_variable مع اسم المتغير كوسيطة لإنشاء متغير جديد بهذا الاسم أو استرداد المتغير الذي تم إنشاؤه من قبل. وهذا يختلف عن استخدام tf.Variable constructor الذي سينشئ متغيراً جديداً في كل مرة يتم استدعاؤه (ويحتمل أن يضيف لاحقة إلى اسم المتغير إذا كان متغير بهذا الاسم موجوداً بالفعل). ولغرض آلية المشاركة المتغيرة ، تم تقديم نوع منفصل من النطاق (نطاق متغير). نتيجة لذلك ، تم وضع نوعين مختلفين من النطاقات: أولاً، نطاق الاسم ، يتم إنشاؤه باستخدام tf.name_scope، ثانياً، نطاق متغير ، يتم إنشاؤه باستخدام tf.variable_scope . كلا النطاقين لهما نفس التأثير على جميع العمليات وكذلك المتغيرات التي تم إنشاؤها باستخدام متغير tf، أي سيتم إضافة النطاق كبادئة إلى العملية أو اسم المتغير. ومع ذلك ، يتم تجاهل نطاق الاسم بواسطة tf.get_variable. يمكننا أن نرى ذلك في المثال التالي: الطريقة الوحيدة لوضع متغير يتم الوصول إليه باستخدام tf.get_variable في نطاق هو استخدام نطاق متغير ، كما في المثال التالي: with tf.name_scope("scope"): variable1 = tf.get_variable("variable1", [1], dtype=tf.float64) variable2 = tf.Variable(1, name="variable2", dtype=tf.float64) op = tf.add(variable1, variable2) # scope/Add:0 op.name # variable1:0 variable1.name # scope/variable2:0 variable2.name الطريقة الوحيدة لوضع متغير يتم الوصول إليه باستخدام tf.get_variable في نطاق هو استخدام نطاق متغير ، كما في المثال التالي: with tf.name_scope("scope"): variable1 = tf.get_variable("variable1", [1], dtype=tf.float64) variable2 = tf.Variable(1, name="variable2", dtype=tf.float64) op = tf.add(variable1, variable2) # scope/Add:0 op.name # scope/variable1:0 variable1.name # scope/variable2:0 variable2.name يتيح لنا ذلك مشاركة المتغيرات بسهولة عبر أجزاء مختلفة من البرنامج ، حتى ضمن نطاقات الأسماء المختلفة: with tf.name_scope("bla"): with tf.variable_scope("scope"): var = tf.get_variable("variable", [1]) with tf.name_scope("blabla"): with tf.variable_scope("scope", reuse=True): var1 = tf.get_variable("variable", [1]) assert var1 == var var.name # scope/variable:0 var1.name # scope/variable:0 1 اقتباس
السؤال
عامر ابراهيم
لم أفهم الاختلاف بين نطاق الاسم name scope والنطاق المتغير variable scope في Tensorflow؟ هل من الممكن أن يتم توضيحه؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.