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

Атрибут losses

Атрибут losses класса Model возвращает список тензоров, содержащих значения потерь, которые были вычислены для каждого выхода модели во время последнего прямого прохода. Этот атрибут доступен только после вызова метода compile с указанной функцией потерь и выполнения прямого прохода через модель. Каждый элемент списка соответствует потере для отдельного выхода или отдельного слоя, если потери заданы на уровне слоев. Атрибут возвращает список тензоров TensorFlow, а не одно число, поскольку модель может иметь несколько выходов или несколько заданных функций потерь.

Синтаксис

model.losses

Пример

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

import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Dense(3, input_shape=(2,)), tf.keras.layers.Dense(1) ]) model.compile(optimizer='sgd', loss='mse') t = tf.constant([[1.0, 2.0]]) _ = model(t) print(model.losses)

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

[]

В данном случае список пуст, так как потери на уровне слоев не заданы. Атрибут losses хранит только те потери, которые добавлены самими слоями через метод add_loss.

Пример

Давайте создадим слой с дополнительной потерей регуляризации через метод add_loss и посмотрим, как это отразится на атрибуте losses:

import tensorflow as tf tf.random.set_seed(0) class CustomLayer(tf.keras.layers.Layer): def call(self, inputs): self.add_loss(tf.reduce_mean(tf.square(inputs))) return inputs model = tf.keras.Sequential([ tf.keras.layers.Dense(3, input_shape=(2,)), CustomLayer(), tf.keras.layers.Dense(1) ]) model.compile(optimizer='sgd', loss='mse') t = tf.constant([[1.0, 2.0]]) _ = model(t) print(model.losses)

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

[<tf.Tensor: shape=(), dtype=float32, numpy=6.4466734>]

Теперь атрибут losses содержит один тензор - потерю, добавленную пользовательским слоем во время прямого прохода.

Пример

Давайте добавим несколько потерь на уровне слоев и посмотрим, как они все попадут в атрибут losses:

import tensorflow as tf tf.random.set_seed(0) class LossLayer(tf.keras.layers.Layer): def call(self, inputs): self.add_loss(tf.reduce_sum(inputs)) self.add_loss(tf.reduce_mean(inputs)) return inputs model = tf.keras.Sequential([ tf.keras.layers.Dense(3, input_shape=(2,)), LossLayer() ]) model.compile(optimizer='sgd', loss='mse') t = tf.constant([[1.0, 2.0]]) _ = model(t) for loss in model.losses: print(loss.numpy())

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

1.9509828 0.6503276

В списке losses оказалось две потери - по одной на каждый вызов метода add_loss внутри слоя.

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

  • класс Model,
    который представляет модель TensorFlow
  • метод compile,
    который настраивает модель для обучения
  • метод fit,
    который обучает модель на данных
  • атрибут metrics,
    который хранит метрики модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить