#python #tensorflow #keras #keras-layer
#python #tensorflow #keras #keras-слой
Вопрос:
существует отличное введение о том, как создавать пользовательские слои в tensorflow.
Пример, взятый из документации, будет
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, input):
return tf.matmul(input, self.kernel)
layer = MyDenseLayer(10)
Я хотел бы знать, какие параметры у меня есть для создания слоев, не вступая в конфликт с механизмом обратного распространения.
Разрешено ли мне использовать
1. **numpy** statements
2. **if/else** statements
3. **for** loops
4. **lists and dictionaries*
Я предполагаю, что использование numpy сложно, но могу ли я использовать аналог tensorflow, например, в цикле for?
Если вы можете указать дополнительные правила, не стесняйтесь добавлять их.
Комментарии:
1. Вы можете использовать операции TensorFlow, а также циклы и if / else, если они вам нужны. Что касается списков и словарей, это зависит от того, о каком использовании вы думаете. Например, вы не должны преобразовывать тензор в список. Следует избегать операций NumPy, вы можете использовать их в режиме ожидания, но градиенты не будут распространяться через них в обратном направлении, и функция не будет «отслеживаться» на графике, что делает ее медленнее. В общем, все, что вы можете сделать в a
tf.function
, должно работать (см. Это руководство ).2. Вы можете использовать функции NumPy
tf.numpy_function
, но это все равно не даст вам градиента, если вы не предоставите его самостоятельно, например, обернув его сtf.custom_gradient
помощью .