Атрибут non_trainable_weights
Атрибут non_trainable_weights класса Layer возвращает список тензоров,
которые принадлежат слою, но не обновляются оптимизатором во время обучения.
Такие веса обычно используются для внутренних состояний слоя, например,
для статистики нормализации или счетчиков. Атрибут доступен только после
построения слоя, то есть после первого вызова метода build или вызова слоя на данных.
Атрибут не принимает параметров и возвращает список объектов тензоров TensorFlow. Если у слоя нет нетренируемых весов, возвращается пустой список.
Синтаксис
layer.non_trainable_weights
Пример
Давайте создадим слой Dense и посмотрим на его нетренируемые веса.
У полносвязного слоя без специальных настроек таких весов нет:
import tensorflow as tf
layer = tf.keras.layers.Dense(3)
layer.build((None, 5))
print(layer.non_trainable_weights)
Результат выполнения кода:
[]
Пример
Давайте создадим слой пакетной нормализации BatchNormalization.
Этот слой хранит скользящее среднее и дисперсию, которые являются
нетренируемыми весами:
import tensorflow as tf
layer = tf.keras.layers.BatchNormalization()
layer.build((None, 4))
print(len(layer.non_trainable_weights))
print(layer.non_trainable_weights[0].shape)
Результат выполнения кода:
2
(4,)
Пример
Давайте создадим собственный слой с нетренируемым весом через метод
add_weight и проверим, что он попадает в атрибут
non_trainable_weights:
import tensorflow as tf
class MyLayer(tf.keras.layers.Layer):
def build(self, input_shape):
self.my_weight = self.add_weight(
name="my_weight",
shape=(),
initializer="zeros",
trainable=False
)
layer = MyLayer()
layer.build((None, 3))
print(layer.non_trainable_weights)
print(layer.trainable_weights)
Результат выполнения кода:
[<tf.Variable 'my_weight:0' shape=() dtype=float32, numpy=0.0>]
[]
Смотрите также
-
атрибут
trainable_weights,
который возвращает список тренируемых весов слоя -
атрибут
weights,
который возвращает все веса слоя -
метод
add_weight,
который добавляет новый вес в слой -
класс
Layer,
который является базовым классом для всех слоев