Метод build класса Layer
Метод build класса Layer вызывается автоматически при первом вызове слоя
с реальными данными. Внутри этого метода слой создает свои веса и другие
переменные, используя переданную форму входных данных. Первым параметром
метод принимает input_shape - кортеж или TensorShape с размерами
входа без учета размера батча. После вызова build атрибут built
становится равным True, а созданные веса попадают в список
weights. При переопределении метода в собственном слое нужно
вызывать super().build(input_shape) в конце.
Синтаксис
Layer.build(input_shape)
Пример
Давайте создадим собственный слой, который переопределяет метод
build и создает один вес формы, зависящей от входных данных:
import tensorflow as tf
class MyLayer(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(
name="kernel",
shape=(input_shape[-1], self.units),
initializer="glorot_uniform",
trainable=True,
)
super().build(input_shape)
def call(self, inputs):
return tf.matmul(inputs, self.w)
layer = MyLayer(units=3)
t = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
res = layer(t)
print(layer.built)
print(res.shape)
Результат выполнения кода:
True
(2, 3)
Пример
Давайте вызовем метод build вручную и посмотрим на созданные веса:
Результат выполнения кода:
True
2
(5, 4)
(4,)