Guía de estilo del código TensorFlow

estilo pitón

Siga la guía de estilo de Python de PEP 8 , excepto que TensorFlow usa 2 espacios en lugar de 4. Cumpla con la Guía de estilo de Google Python y use pylint para verificar sus cambios en Python.

pylint

Para instalar pylint :

$ pip install pylint

Para verificar un archivo con pylint desde el directorio raíz del código fuente de TensorFlow:

$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py

Versiones de Python compatibles

Para conocer las versiones de Python compatibles, consulte la guía de instalación de TensorFlow.

Consulte el estado de compilación continua de TensorFlow para conocer las compilaciones oficiales y respaldadas por la comunidad.

Estilo de codificación C++

Los cambios en el código de TensorFlow C++ deben ajustarse a la Guía de estilo de Google C++ y a los detalles de estilo específicos de TensorFlow . Utilice clang-format para comprobar sus cambios en C/C++.

Para instalar en Ubuntu 16+, haga:

$ apt-get install -y clang-format

Puede comprobar el formato de un archivo C/C++ con lo siguiente:

$ clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
$ diff <my_cc_file> /tmp/my_cc_file.cc

Otros idiomas

Convenciones y usos especiales de TensorFlow

Operaciones de Python

Una operación de TensorFlow es una función que, dados los tensores de entrada, devuelve tensores de salida (o agrega una operación a un gráfico al crear gráficos).

  • El primer argumento deben ser los tensores, seguidos de los parámetros básicos de Python. El último argumento es name con un valor predeterminado de None .
  • Los argumentos tensoriales deben ser un tensor único o un iterable de tensores. Es decir, un "Tensor o lista de Tensores" es demasiado amplio. Consulte assert_proper_iterable .
  • Las operaciones que toman tensores como argumentos deben llamar convert_to_tensor para convertir entradas que no sean tensoriales en tensores si usan operaciones C++. Tenga en cuenta que los argumentos todavía se describen como un objeto Tensor de un tipo específico en la documentación.
  • Cada operación de Python debe tener un name_scope . Como se ve a continuación, pase el nombre de la operación como una cadena.
  • Las operaciones deben contener un comentario extenso de Python con declaraciones Args y Returns que expliquen tanto el tipo como el significado de cada valor. Las posibles formas, tipos o rangos deben especificarse en la descripción. Ver detalles de la documentación.
  • Para una mayor usabilidad, incluya un ejemplo de uso con entradas/salidas de la operación en la sección Ejemplo.
  • Evite hacer uso explícito de tf.Tensor.eval o tf.Session.run . Por ejemplo, para escribir lógica que dependa del valor de Tensor, use el flujo de control de TensorFlow. Alternativamente, restrinja la operación para que solo se ejecute cuando la ejecución ansiosa esté habilitada ( tf.executing_eagerly() ).

Ejemplo:

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

Uso:

output = my_op(t1, t2, my_param=0.5, other_param=0.6,
               output_collections=['MY_OPS'], name='add_t1t2')