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
- Guía de estilo de Google Java
- Guía de estilo de JavaScript de Google
- Guía de estilo de Google Shell
- Guía de estilo de Google Objective-C
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 deNone
. - 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 objetoTensor
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
otf.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')