Атрибут losses
Атрибут losses класса Layer возвращает список тензоров потерь, которые были добавлены в слой через метод add_loss. Этот атрибут используется при построении сложных моделей, где слой может иметь собственные регуляризационные потери, не связанные напрямую с целевой функцией модели. Потери хранятся в виде тензоров и доступны после вызова слоя или после явного добавления через add_loss.
Атрибут не принимает параметров и доступен только для чтения. Он возвращает список, элементы которого являются тензорами TensorFlow. Атрибут полезен для отладки и анализа модели, а также для вычисления итоговой функции потерь в кастомных циклах обучения.
Синтаксис
layer.losses
Пример
Давайте создадим простой слой и добавим в него потерю через метод add_loss, а затем выведем содержимое атрибута losses:
import tensorflow as tf
tf.random.set_seed(0)
class MyLayer(tf.keras.layers.Layer):
def call(self, inputs):
self.add_loss(tf.reduce_mean(inputs))
return inputs
layer = MyLayer()
t = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0])
res = layer(t)
print(layer.losses)
Результат выполнения кода:
[<tf.Tensor: shape=(), dtype=float32, numpy=3.0>]
Пример
Давайте добавим несколько потерь в слой и посмотрим, как они накапливаются в атрибуте losses:
Результат выполнения кода:
tf.Tensor(15.0, shape=(), dtype=float32)
tf.Tensor(3.0, shape=(), dtype=float32)
tf.Tensor(5.0, shape=(), dtype=float32)
Пример
Давайте проверим, что атрибут losses пуст, если потери не добавлялись:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Dense(3)
t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
res = layer(t)
print(layer.losses)
Результат выполнения кода:
[]