Hướng dẫn về kiểu mã TensorFlow

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++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 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ượ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')