أسلوب بايثون
اتبع دليل أسلوب 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
لغات اخرى
- دليل أنماط جافا من Google
- دليل أنماط جافا سكريبت من Google
- دليل أسلوب Google Shell
- دليل أسلوب Google Objective-C
اتفاقيات 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')