دليل نمط رمز TensorFlow
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
أسلوب بايثون
اتبع دليل نمط PEP 8 Python ، باستثناء أن TensorFlow يستخدم مسافتين بدلاً من 4. يرجى الالتزام بدليل Google Python Style Guide ، واستخدام pylint للتحقق من تغييرات Python.
بيلينت
لتثبيت pylint
:
$ pip install pylint
للتحقق من ملف باستخدام pylint
من الدليل الجذر لرمز مصدر TensorFlow:
$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py
إصدارات بايثون المدعومة
للحصول على إصدارات 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 هي دالة تقوم، في حالة وجود موترات الإدخال، بإرجاع موترات الإخراج (أو إضافة عملية إلى الرسم البياني عند إنشاء الرسوم البيانية).
- يجب أن تكون الوسيطة الأولى عبارة عن موترات، متبوعة بمعلمات Python الأساسية. الوسيطة الأخيرة هي
name
بقيمة افتراضية None
. - يجب أن تكون وسيطات الموتر إما موترًا واحدًا أو موترًا متكررًا. وهذا يعني أن "الموتر أو قائمة الموترات" واسعة جدًا. راجع
assert_proper_iterable
. - العمليات التي تأخذ الموترات كوسيطات يجب أن تستدعي
convert_to_tensor
لتحويل المدخلات غير الموترية إلى موترات إذا كانت تستخدم عمليات C++. لاحظ أن الوسائط لا تزال موصوفة ككائن Tensor
من نوع dtype محدد في الوثائق. - يجب أن تحتوي كل عملية بايثون على
name_scope
. كما هو موضح أدناه، قم بتمرير اسم المرجع كسلسلة. - يجب أن تحتوي العمليات على تعليق بايثون واسع النطاق مع إعلانات Args وReturns التي تشرح نوع ومعنى كل قيمة. يجب تحديد الأشكال أو dtypes أو الرتب المحتملة في الوصف. انظر تفاصيل الوثائق.
- لزيادة سهولة الاستخدام، قم بتضمين مثال للاستخدام مع مدخلات / مخرجات العملية في قسم المثال.
- تجنب الاستخدام الصريح لـ
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')
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2025-01-14 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-01-14 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# TensorFlow code style guide\n\nPython style\n------------\n\nFollow the [PEP 8 Python style\nguide](https://www.python.org/dev/peps/pep-0008/), except TensorFlow uses 2\nspaces instead of 4. Please conform to the\n[Google Python Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md),\nand use [pylint](https://www.pylint.org/) to check your Python changes.\n\n### pylint\n\nTo install `pylint`: \n\n $ pip install pylint\n\nTo check a file with `pylint` from the TensorFlow source code root directory: \n\n $ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py\n\n### Supported Python versions\n\nFor supported Python versions, see the TensorFlow\n[installation guide](https://www.tensorflow.org/install).\n\nSee the TensorFlow\n[continuous build status](https://github.com/tensorflow/tensorflow/blob/master/README.md#continuous-build-status)\nfor official and community supported builds.\n\nC++ coding style\n----------------\n\nChanges to TensorFlow C++ code should conform to the [Google C++ Style\nGuide](https://google.github.io/styleguide/cppguide.html) and [TensorFlow specific style details](https://github.com/tensorflow/community/blob/master/governance/cpp-style.md). Use `clang-format` to check your C/C++ changes.\n\nTo install on Ubuntu 16+, do: \n\n $ apt-get install -y clang-format\n\nYou can check the format of a C/C++ file with the following: \n\n $ clang-format \u003cmy_cc_file\u003e --style=google \u003e /tmp/my_cc_file.cc\n $ diff \u003cmy_cc_file\u003e /tmp/my_cc_file.cc\n\nOther languages\n---------------\n\n- [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)\n- [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)\n- [Google Shell Style Guide](https://google.github.io/styleguide/shell.xml)\n- [Google Objective-C Style Guide](https://google.github.io/styleguide/objcguide.html)\n\nTensorFlow conventions and special uses\n---------------------------------------\n\n### Python operations\n\nA TensorFlow *operation* is a function that, given input tensors returns output\ntensors (or adds an op to a graph when building graphs).\n\n- The first argument should be tensors, followed by basic Python parameters. The last argument is `name` with a default value of `None`.\n- Tensor arguments should be either a single tensor or an iterable of tensors. That is, a \"Tensor or list of Tensors\" is too broad. See `assert_proper_iterable`.\n- Operations that take tensors as arguments should call `convert_to_tensor` to convert non-tensor inputs into tensors if they are using C++ operations. Note that the arguments are still described as a `Tensor` object of a specific dtype in the documentation.\n- Each Python operation should have a `name_scope`. As seen below, pass the name of the op as a string.\n- Operations should contain an extensive Python comment with Args and Returns declarations that explain both the type and meaning of each value. Possible shapes, dtypes, or ranks should be specified in the description. See documentation details.\n- For increased usability, include an example of usage with inputs / outputs of the op in Example section.\n- Avoid making explicit use of [`tf.Tensor.eval`](https://www.tensorflow.org/api_docs/python/tf/Tensor#eval) or `tf.Session.run`. For example, to write logic that depends on the Tensor value, use the TensorFlow control flow. Alternatively, restrict the operation to only run when eager execution is enabled ([`tf.executing_eagerly()`](https://www.tensorflow.org/api_docs/python/tf/executing_eagerly)).\n\nExample: \n\n def my_op(tensor_in, other_tensor_in, my_param, other_param=0.5,\n output_collections=(), name=None):\n \"\"\"My operation that adds two tensors with given coefficients.\n\n Args:\n tensor_in: `Tensor`, input tensor.\n other_tensor_in: `Tensor`, same shape as `tensor_in`, other input tensor.\n my_param: `float`, coefficient for `tensor_in`.\n other_param: `float`, coefficient for `other_tensor_in`.\n output_collections: `tuple` of `string`s, name of the collection to\n collect result of this op.\n name: `string`, name of the operation.\n\n Returns:\n `Tensor` of same shape as `tensor_in`, sum of input values with coefficients.\n\n Example:\n \u003e\u003e\u003e my_op([1., 2.], [3., 4.], my_param=0.5, other_param=0.6,\n output_collections=['MY_OPS'], name='add_t1t2')\n [2.3, 3.4]\n \"\"\"\n with tf.name_scope(name or \"my_op\"):\n tensor_in = tf.convert_to_tensor(tensor_in)\n other_tensor_in = tf.convert_to_tensor(other_tensor_in)\n result = my_param * tensor_in + other_param * other_tensor_in\n tf.add_to_collection(output_collections, result)\n return result\n\nUsage: \n\n output = my_op(t1, t2, my_param=0.5, other_param=0.6,\n output_collections=['MY_OPS'], name='add_t1t2')"]]