Styl Pythona
Postępuj zgodnie z przewodnikiem po stylu Pythona PEP 8 , z tą różnicą, że TensorFlow używa 2 spacji zamiast 4. Postępuj zgodnie z Przewodnikiem po stylu Google Python i użyj pylint , aby sprawdzić zmiany w Pythonie.
słupek
Aby zainstalować pylint
:
$ pip install pylint
Aby sprawdzić plik za pomocą pylint
z katalogu głównego kodu źródłowego TensorFlow:
$ pylint --rcfile=tensorflow/tools/ci_build/pylintrc tensorflow/python/keras/losses.py
Obsługiwane wersje Pythona
Informacje na temat obsługiwanych wersji języka Python można znaleźć w przewodniku instalacji TensorFlow.
Zobacz status ciągłej kompilacji TensorFlow dla kompilacji oficjalnych i wspieranych przez społeczność.
Styl kodowania C++
Zmiany w kodzie TensorFlow C++ powinny być zgodne z Przewodnikiem po stylu Google C++ i szczegółowymi szczegółami dotyczącymi stylu TensorFlow . Użyj clang-format
aby sprawdzić zmiany w C/C++.
Aby zainstalować na Ubuntu 16+, wykonaj:
$ apt-get install -y clang-format
Możesz sprawdzić format pliku C/C++ za pomocą następujących poleceń:
$ clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
$ diff <my_cc_file> /tmp/my_cc_file.cc
Inne języki
- Przewodnik po stylu Google Java
- Przewodnik po stylu JavaScript Google
- Przewodnik po stylu Google Shell
- Przewodnik po stylu Google Objective-C
Konwencje i zastosowania specjalne TensorFlow
Operacje w Pythonie
Operacja TensorFlow to funkcja, która przy danych tensorach wejściowych zwraca tensory wyjściowe (lub dodaje op do wykresu podczas tworzenia wykresów).
- Pierwszym argumentem powinny być tensory, po których następują podstawowe parametry Pythona. Ostatnim argumentem jest
name
z domyślną wartościąNone
. - Argumenty tensora powinny być pojedynczym tensorem lub iterowalną liczbą tensorów. Oznacza to, że „Tensor lub lista tensorów” jest zbyt szeroka.
assert_proper_iterable
. - Operacje, które przyjmują tensory jako argumenty, powinny wywołać
convert_to_tensor
, aby przekonwertować dane wejściowe niebędące tensorem na tensory, jeśli używają operacji C++. Należy zauważyć, że argumenty są nadal opisywane w dokumentacji jako obiektTensor
o określonym typie. - Każda operacja Pythona powinna mieć
name_scope
. Jak widać poniżej, podaj nazwę operacji jako ciąg znaków. - Operacje powinny zawierać obszerny komentarz w języku Python z deklaracjami Args i Returns wyjaśniającymi zarówno typ, jak i znaczenie każdej wartości. W opisie należy podać możliwe kształty, typy lub rangi. Zobacz szczegóły dokumentacji.
- Aby zwiększyć użyteczność, dołącz przykład użycia z wejściami/wyjściami operacji w sekcji Przykład.
- Unikaj jawnego używania
tf.Tensor.eval
lubtf.Session.run
. Na przykład, aby napisać logikę zależną od wartości Tensor, użyj przepływu sterowania TensorFlow. Alternatywnie ogranicz operację do uruchamiania tylko wtedy, gdy włączone jest szybkie wykonanie (tf.executing_eagerly()
).
Przykład:
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
Stosowanie:
output = my_op(t1, t2, my_param=0.5, other_param=0.6,
output_collections=['MY_OPS'], name='add_t1t2')