دليل نمط كود TensorFlow

أسلوب بايثون

اتبع دليل أسلوب PEP 8 Python ، باستثناء أن TensorFlow يستخدم مسافتين بدلاً من 4. يرجى الالتزام بدليل أسلوب Google Python ، واستخدم pylint للتحقق من تغييرات Python.

pylint

لتثبيت pylint :

$ pip install pylint

للتحقق من ملف باستخدام pylint من الدليل الجذر لشفرة مصدر TensorFlow:

$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py

إصدارات Python المدعومة

للحصول على إصدارات Python المدعومة ، راجع دليل تثبيت TensorFlow.

اطلع على حالة البناء المستمر لـ TensorFlow للبنيات المدعومة من الجهات الرسمية والمجتمعية.

أسلوب الترميز C ++

يجب أن تتوافق التغييرات التي يتم إجراؤها على كود TensorFlow C ++ مع دليل أسلوب Google C ++ وتفاصيل نمط TensorFlow المحددة . استخدم clang-format للتحقق من تغييرات C / C ++.

للتثبيت على Ubuntu 16+ ، قم بما يلي:

$ apt-get install -y clang-format

يمكنك التحقق من تنسيق ملف C / C ++ بما يلي:

$ clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
$ diff <my_cc_file> /tmp/my_cc_file.cc

لغات اخرى

اتفاقيات TensorFlow والاستخدامات الخاصة

عمليات بايثون

عملية TensorFlow هي وظيفة ، نظرًا لموترات الإدخال ، تُرجع موترات الإخراج (أو تضيف مرجعًا إلى الرسم البياني عند إنشاء الرسوم البيانية).

  • يجب أن تكون الوسيطة الأولى عبارة عن موترات ، متبوعة بمعلمات بايثون الأساسية. والوسيطة الأخيرة name مع قيمة افتراضية None .
  • يجب أن تكون وسيطات الموتر إما موترًا واحدًا أو موترًا متكررًا. وهذا يعني أن "Tensor أو قائمة Tensors" واسعة جدًا. انظر assert_proper_iterable .
  • العمليات التي تأخذ convert_to_tensor يجب أن تستدعي convert_to_tensor لتحويل مدخلات غير موتر إلى موترات إذا كانت تستخدم عمليات C ++. لاحظ أن الوسائط لا تزال موصوفة ككائن Tensor من نوع dtype محدد في الوثائق.
  • يجب أن يكون لكل عملية بايثون name_scope . كما هو موضح أدناه ، مرر اسم المرجع كسلسلة.
  • يجب أن تحتوي العمليات على تعليق Python واسع النطاق مع تصريحات Args و Returns التي تشرح كل من نوع ومعنى كل قيمة. يجب تحديد الأشكال أو الأنواع أو الرتب المحتملة في الوصف. انظر تفاصيل الوثائق.
  • لزيادة قابلية الاستخدام ، قم بتضمين مثال على الاستخدام مع مدخلات / مخرجات المرجع في قسم المثال.
  • تجنب الاستفادة صريح tf.Tensor.eval أو tf.Session.run . على سبيل المثال ، لكتابة منطق يعتمد على قيمة Tensor ، استخدم تدفق التحكم TensorFlow. بدلاً من ذلك ، قم بتقييد العملية للتشغيل فقط عند تمكين التنفيذ tf.executing_eagerly() ).

مثال:

def my_op(tensor_in, other_tensor_in, my_param, other_param=0.5,
          output_collections=(), name=None):
  """My operation that adds two tensors with given coefficients.

  Args:
    tensor_in: `Tensor`, input tensor.
    other_tensor_in: `Tensor`, same shape as `tensor_in`, other input tensor.
    my_param: `float`, coefficient for `tensor_in`.
    other_param: `float`, coefficient for `other_tensor_in`.
    output_collections: `tuple` of `string`s, name of the collection to
                        collect result of this op.
    name: `string`, name of the operation.

  Returns:
    `Tensor` of same shape as `tensor_in`, sum of input values with coefficients.

  Example:
    >>> my_op([1., 2.], [3., 4.], my_param=0.5, other_param=0.6,
              output_collections=['MY_OPS'], name='add_t1t2')
    [2.3, 3.4]
  """
  with tf.name_scope(name or "my_op"):
    tensor_in = tf.convert_to_tensor(tensor_in)
    other_tensor_in = tf.convert_to_tensor(other_tensor_in)
    result = my_param * tensor_in + other_param * other_tensor_in
    tf.add_to_collection(output_collections, result)
    return result

استعمال:

output = my_op(t1, t2, my_param=0.5, other_param=0.6,
               output_collections=['MY_OPS'], name='add_t1t2')