Стиль Python
Следуйте руководству по стилю PEP 8 Python , за исключением того, что TensorFlow использует 2 пробела вместо 4. Соблюдайте руководство по стилю Google Python и используйте pylint для проверки изменений Python.
пилинт
Чтобы установить pylint
:
$ pip install pylint
Чтобы проверить файл с помощью pylint
из корневого каталога исходного кода TensorFlow:
$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py
Поддерживаемые версии Python
Поддерживаемые версии Python см. в руководстве по установке TensorFlow.
См. статус непрерывной сборки TensorFlow для официальных сборок и сборок, поддерживаемых сообществом.
стиль кодирования C++
Изменения в коде TensorFlow C++ должны соответствовать Руководству по стилю Google C++ и конкретным деталям стиля TensorFlow . Используйте 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
Другие языки
- Руководство по стилю Google Java
- Руководство по стилю Google JavaScript
- Руководство по стилю оболочки Google
- Руководство по стилю Google Objective-C
Соглашения TensorFlow и специальное использование
Операции Python
Операция TensorFlow — это функция, которая по заданным входным тензорам возвращает выходные тензоры (или добавляет операцию к графу при построении графиков).
- Первым аргументом должны быть тензоры, за которыми следуют базовые параметры Python. Последний аргумент — это
name
со значением по умолчаниюNone
. - Аргументы тензора должны быть либо одним тензором, либо итерацией тензоров. То есть «Тензор или список тензоров» слишком широк. См.
assert_proper_iterable
. - Операции, которые принимают тензоры в качестве аргументов, должны вызывать
convert_to_tensor
для преобразования нетензорных входных данных в тензоры, если они используют операции C++. Обратите внимание, что аргументы по-прежнему описываются в документации как объектTensor
определенного типа d. - Каждая операция Python должна иметь
name_scope
. Как показано ниже, передайте имя операции в виде строки. - Операции должны содержать обширный комментарий Python с объявлениями Args и Returns, которые объясняют тип и значение каждого значения. Возможные формы, типы или ранги должны быть указаны в описании. См. подробности документации.
- Для повышения удобства использования включите пример использования с входами/выходами операции в раздел «Пример».
- Избегайте явного использования
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')