Правила создания пользовательского слоя tensorflow

#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 помощью .