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
- Hướng dẫn về phong cách Java của Google
- Hướng dẫn về phong cách JavaScript của Google
- Hướng dẫn về phong cách Google Shell
- Hướng dẫn về phong cách Objective-C của Google
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 mà 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ượngTensor
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ặctf.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')