РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
254 of 824 menu

Метод call класса Layer

Метод call класса Layer является главным методом любого слоя в TensorFlow. Именно в этом методе описывается логика прямого распространения: какие операции применяются к входным данным, чтобы получить выходные. Первым параметром метод принимает входной тензор inputs, вторым необязательным параметром - флаг training, который указывает, работает ли слой в режиме обучения. При создании собственного слоя метод call обязательно переопределяется.

Синтаксис

class MyLayer(tf.keras.layers.Layer): def call(self, inputs, training=None): # logic here return outputs

Пример

Давайте создадим простой слой, который умножает входной тензор на заданный коэффициент:

import tensorflow as tf class MultiplyLayer(tf.keras.layers.Layer): def __init__(self, factor=2.0, **kwargs): super().__init__(**kwargs) self.factor = factor def call(self, inputs, training=None): return inputs * self.factor layer = MultiplyLayer(factor=3.0) t = tf.constant([1, 2, 3, 4, 5]) res = layer(t) print(res)

Результат выполнения кода:

tf.Tensor([ 3. 6. 9. 12. 15.], shape=(5,), dtype=float32)

Пример

Давайте рассмотрим слой, который использует флаг training для разного поведения при обучении и при выводе:

<+python+> import tensorflow as tf class ScaleLayer(tf.keras.layers.Layer): def call(self, inputs, training=None): if training: return inputs * 2.0 return inputs layer = ScaleLayer() t = tf.constant([1, 2, 3, 4, 5]) res_train = layer(t, training=True) res_infer = layer(t, training=False) print(res_train) print(res_infer) <-python+>

Результат выполнения кода:

tf.Tensor([ 2. 4. 6. 8. 10.], shape=(5,), dtype=float32) tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)

Пример

Давайте создадим слой с обучаемым весом внутри метода call и применим его к двумерному тензору:

import tensorflow as tf tf.random.set_seed(0) class DenseSimple(tf.keras.layers.Layer): def __init__(self, units=3, **kwargs): super().__init__(**kwargs) self.units = units def build(self, input_shape): self.w = self.add_weight( shape=(input_shape[-1], self.units), initializer='ones', trainable=True ) super().build(input_shape) def call(self, inputs, training=None): return tf.matmul(inputs, self.w) layer = DenseSimple(units=2) t = tf.constant([[1, 2, 3], [4, 5, 6]]) res = layer(t) print(res)

Результат выполнения кода:

tf.Tensor( [[ 6. 6.] [15. 15.]], shape=(2, 2), dtype=float32)

Смотрите также

  • класс Layer,
    который является базовым классом для всех слоев
  • метод build,
    который создает веса слоя при первом вызове
  • метод compute_output_shape,
    который вычисляет форму выходного тензора
  • метод add_weight,
    который добавляет обучаемый вес в слой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить