راهنمای سبک کد TensorFlow
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
سبک پایتون
راهنمای سبک PEP 8 Python را دنبال کنید، به جز اینکه TensorFlow از 2 فاصله به جای 4 استفاده می کند. لطفاً با راهنمای سبک پایتون Google مطابقت داشته باشید، و از pylint برای بررسی تغییرات پایتون خود استفاده کنید.
ستون
برای نصب pylint
:
$ pip install pylint
برای بررسی یک فایل با pylint
از فهرست اصلی کد منبع TensorFlow:
$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py
نسخه های پایتون پشتیبانی می شود
برای نسخه های پایتون پشتیبانی شده، راهنمای نصب TensorFlow را ببینید.
وضعیت ساخت مداوم TensorFlow را برای ساختهای رسمی و پشتیبانی شده توسط انجمن ببینید.
سبک کدنویسی C++
تغییرات در کد TensorFlow C++ باید با راهنمای سبک Google C++ و جزئیات سبک خاص 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 تابعی است که با توجه به تانسورهای ورودی، تانسورهای خروجی را برمی گرداند (یا هنگام ساختن نمودارها، یک op به نمودار اضافه می کند).
- اولین آرگومان باید تانسورها و به دنبال آن پارامترهای پایه پایتون باشد. آخرین آرگومان
name
با مقدار پیش فرض None
است. - آرگومان های تانسور باید یا یک تانسور منفرد یا یک تانسور تکرار شونده باشند. یعنی «تنسور یا فهرست تنسورها» خیلی گسترده است.
assert_proper_iterable
را ببینید. - عملیاتی که تانسورها را به عنوان آرگومان می گیرند، باید
convert_to_tensor
فراخوانی کنند تا ورودی های غیر تانسوری را به تانسور تبدیل کنند، اگر از عملیات C++ استفاده می کنند. توجه داشته باشید که آرگومان ها همچنان به عنوان یک شی Tensor
از نوع d خاص در مستندات توصیف می شوند. - هر عملیات پایتون باید یک
name_scope
داشته باشد. همانطور که در زیر مشاهده می کنید، نام op را به عنوان یک رشته ارسال کنید. - عملیات باید حاوی یک نظر گسترده پایتون با اعلانهای Args و Returns باشد که هم نوع و هم معنای هر مقدار را توضیح دهد. شکلها، dtypes یا رتبههای احتمالی باید در توضیحات مشخص شوند. جزئیات مستندات را ببینید.
- برای افزایش قابلیت استفاده، مثالی از استفاده با ورودی/خروجی عملیات را در بخش Example قرار دهید.
- از استفاده صریح از
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 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده 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')"]]