Hướng dẫn về kiểu mã TensorFlow
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Kiểu Python
Làm theo hướng dẫn về kiểu Python PEP 8 , ngoại trừ TensorFlow sử dụng 2 dấu cách thay vì 4. Vui lòng tuân thủ Hướng dẫn về kiểu Python của Google và sử dụng pylint để kiểm tra các thay đổi Python của bạn.
trụ cột
Để cài đặt pylint
:
$ pip install pylint
Để kiểm tra tệp có pylint
từ thư mục gốc mã nguồn TensorFlow:
$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py
Các phiên bản Python được hỗ trợ
Để biết các phiên bản Python được hỗ trợ, hãy xem hướng dẫn cài đặt TensorFlow.
Xem trạng thái bản dựng liên tục của TensorFlow để biết các bản dựng chính thức và được cộng đồng hỗ trợ.
Phong cách mã hóa C++
Các thay đổi đối với mã TensorFlow C++ phải tuân theo Hướng dẫn về kiểu dáng của Google C++ và các chi tiết về kiểu dáng cụ thể của TensorFlow . Sử dụng clang-format
để kiểm tra các thay đổi C/C++ của bạn.
Để cài đặt trên Ubuntu 16+, hãy làm:
$ apt-get install -y clang-format
Bạn có thể kiểm tra định dạng của tệp C/C++ bằng cách sau:
$ clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
$ diff <my_cc_file> /tmp/my_cc_file.cc
Ngôn ngữ khác
Quy ước TensorFlow và cách sử dụng đặc biệt
Hoạt động Python
Hoạt động TensorFlow là một hàm trong đó các tensor đầu vào đã cho sẽ trả về các tensor đầu ra (hoặc thêm một op vào biểu đồ khi xây dựng biểu đồ).
- Đối số đầu tiên phải là tensor, theo sau là các tham số Python cơ bản. Đối số cuối cùng là
name
có giá trị mặc định là None
. - Các đối số tensor phải là một tensor đơn hoặc một tensor lặp lại. Tức là "Tensor hoặc danh sách Tensor" quá rộng. Xem
assert_proper_iterable
. - Các thao tác lấy tensor làm đối số nên gọi
convert_to_tensor
để chuyển đổi đầu vào không có tensor thành tensor nếu chúng đang sử dụng các thao tác C++. Lưu ý rằng các đối số vẫn được mô tả dưới dạng đối tượng Tensor
của một loại dtype cụ thể trong tài liệu. - Mỗi thao tác Python phải có
name_scope
. Như được thấy bên dưới, chuyển tên của op dưới dạng một chuỗi. - Các thao tác phải chứa nhận xét Python mở rộng với các khai báo Args và Returns giải thích cả loại và ý nghĩa của từng giá trị. Hình dạng, loại hoặc cấp bậc có thể có phải được chỉ định trong mô tả. Xem chi tiết tài liệu.
- Để tăng khả năng sử dụng, hãy đưa ví dụ về cách sử dụng với đầu vào/đầu ra của op trong phần Ví dụ.
- Tránh sử dụng rõ ràng
tf.Tensor.eval
hoặc tf.Session.run
. Ví dụ: để viết logic phụ thuộc vào giá trị Tensor, hãy sử dụng luồng điều khiển TensorFlow. Ngoài ra, hãy hạn chế thao tác chỉ chạy khi thực thi háo hức được bật ( tf.executing_eagerly()
).
Ví dụ:
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
Cách sử dụng:
output = my_op(t1, t2, my_param=0.5, other_param=0.6,
output_collections=['MY_OPS'], name='add_t1t2')
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-01-14 UTC.
[null,null,["Cập nhật lần gần đây nhất: 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')"]]