Estilo Python
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 Python de Google y use pylint para verificar los cambios de Python.
pilón
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 ver las versiones de Python compatibles, consulte la guía de instalación de TensorFlow.
Consulta el estado de compilación continua de TensorFlow para compilaciones oficiales y respaldadas por la comunidad.
Estilo de codificación C ++
Los cambios en el código de TensorFlow C ++ deben cumplir con la Guía de estilo de Google C ++ y los detalles de estilo específicos de TensorFlow . Use clang-format
para verificar sus cambios de C / C ++.
Para instalar en Ubuntu 16+, haga lo siguiente:
$ apt-get install -y clang-format
Puede verificar 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 cuando se crean gráficos).
- El primer argumento debe ser tensores, seguido de parámetros básicos de Python. El último argumento es el
name
con un valor predeterminado deNone
. - Los argumentos del tensor deben ser un solo tensor 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 a
convert_to_tensor
para convertir entradas no tensoriales en tensores si utilizan operaciones C ++. Tenga en cuenta que los argumentos todavía se describen como un objetoTensor
de un tipo d 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. Consulte los 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 un uso explícito de
tf.Tensor.eval
otf.Session.run
. Por ejemplo, para escribir lógica que depende del valor de Tensor, usa el flujo de control de TensorFlow. Como alternativa, 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')