מדריך סגנון קוד TensorFlow
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
סגנון פייתון
עקוב אחר המדריך בסגנון PEP 8 Python , למעט TensorFlow משתמש ב-2 רווחים במקום 4. נא להתאים ל- Google Python Style Guide , ולהשתמש ב-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++ Style Guide ולפרטי הסגנון הספציפיים של TensorFlow . השתמש ב- clang-format
כדי לבדוק את השינויים שלך ב-C/C++.
כדי להתקין על אובונטו 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 ספציפי בתיעוד. - לכל פעולת Python צריך להיות
name_scope
. כפי שניתן לראות להלן, העבר את שם האופ כמחרוזת. - פעולות צריכות להכיל הערת Python נרחבת עם הצהרות Args והחזרות המסבירות את הסוג והמשמעות של כל ערך. יש לציין בתיאור צורות, dtypes או דרגות אפשריות. ראה פרטי תיעוד.
- להגברת השימושיות, כלול דוגמה לשימוש עם כניסות/יציאות של ה-op בסעיף הדוגמה.
- הימנע משימוש מפורש ב-
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 (שעון UTC).
[null,null,["עדכון אחרון: 2025-01-14 (שעון UTC)."],[],[],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')"]]