TensorFlow 코드 스타일 가이드

Python 스타일

TensorFlow가 4개 대신 2개의 공백을 사용하는 것을 제외하고 PEP 8 Python 스타일 가이드를 따르세요. Google Python 스타일 가이드를 따르고 pylint를 사용하여 Python 변경 사항을 확인하세요.

pylint

pylint를 설치하고 TensorFlow의 사용자 정의 스타일 정의를 검색하려면 다음을 수행합니다.


$ pip install pylint
$ wget -O /tmp/pylintrc https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/tools/ci_build/pylintrc

pylint로 파일을 확인하려면 다음과 같이 합니다.

$ pylint --rcfile=/tmp/pylintrc myfile.py

지원되는 Python 버전

TensorFlow는 Python > = 3.5를 지원합니다. 자세한 내용은 설치 가이드를 참조하세요.

공식 및 커뮤니티 지원 빌드에 대해서는 TensorFlow 연속 빌드 상태를 참조하세요.

C++ 코딩 스타일

TensorFlow C++ 코드에 대한 변경 사항은 Google C++ 스타일 가이드를 준수해야 합니다. clang-format을 사용하여 C/C++ 변경 사항을 확인하세요.

Ubuntu 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 규칙 및 특수한 사용

Python 연산

TensorFlow 연산은 주어진 입력 텐서가 출력 텐서를 반환하거나 그래프를 빌드할 때 그래프에 op를 추가하는 함수입니다.

  • 첫 번째 인수는 텐서여야 하며 그 뒤에 기본 Python 매개변수가 있어야 합니다. 마지막 인수는 기본값이 Nonename입니다.
  • 텐서 인수는 단일 텐서이거나 반복 가능한 텐서여야 합니다. 즉, "텐서 또는 텐서 목록"이 너무 광범위합니다. assert_proper_iterable을 참조하세요.
  • 텐서를 인수로 사용하는 연산은 C++ 연산을 사용하는 경우 텐서가 아닌 입력을 텐서로 변환하기 위해 convert_to_tensor를 호출해야 합니다. 인수는 여전히 설명서에서 특정 dtype의 Tensor 객체로 설명됩니다.
  • 각 Python 연산에는 name_scope가 있어야 합니다. 아래와 같이 op의 이름을 문자열로 전달합니다.
  • 연산에는 각 값의 유형과 의미를 모두 설명하는 Args 및 Returns 선언을 포함한 광범위한 Python 주석이 포함되어야 합니다. 설명에서 가능한 형상, dtype 또는 순위가 지정되어야 합니다. 자세한 내용은 설명서를 참조하세요.
  • 사용 편의성을 높이려면 예제 섹션에 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')