Атрибут weights класса Model
Атрибут weights класса Model возвращает список,
содержащий все весовые тензоры модели. В этот список входят
как обучаемые параметры (например, ядра и смещения слоёв),
так и необучаемые параметры (например, статистики слоёв
нормализации). Атрибут доступен только после того, как
модель была построена, то есть после первого вызова
build или после передачи входных данных.
Порядок весов в списке соответствует порядку слоёв в модели,
а внутри каждого слоя - порядку, в котором веса были созданы.
Атрибут weights удобно использовать для инспекции
параметров модели, их сохранения или анализа.
Синтаксис
model.weights
Пример
Давайте создадим простую модель с одним полносвязным слоем и выведем её веса:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, input_shape=(2,))
])
model.build()
print(model.weights)
Результат выполнения кода:
[<tf.Variable 'dense/kernel:0' shape=(2, 3) dtype=float32, numpy=
array([[-0.00359635, -0.8007684 , 0.38394082],
[ 1.1484051 , -0.25687748, -0.21029836]], dtype=float32)>,
<tf.Variable 'dense/bias:0' shape=(3,) dtype=float32, numpy=
array([0., 0., 0.], dtype=float32)>]
Пример
Давайте выведем количество весов и их имена для модели с двумя слоями:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(4, input_shape=(3,)),
tf.keras.layers.Dense(2)
])
model.build()
print("Total weights:", len(model.weights))
for w in model.weights:
print(w.name, w.shape)
Результат выполнения кода:
"Total weights: 4"
"dense/kernel:0 (3, 4)"
"dense/bias:0 (4,)"
"dense_1/kernel:0 (4, 2)"
"dense_1/bias:0 (2,)"
Пример
Давайте получим значения весов в виде NumPy-массивов
с помощью метода numpy:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, input_shape=(2,))
])
model.build()
for w in model.weights:
print(w.name)
print(w.numpy())
Результат выполнения кода:
"dense/kernel:0"
[[-0.00359635 -0.8007684 0.38394082]
[ 1.1484051 -0.25687748 -0.21029836]]
"dense/bias:0"
[0. 0. 0.]
Пример
Давайте сравним атрибут weights с атрибутами
trainable_weights и non_trainable_weights
на модели со слоем нормализации:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, input_shape=(2,)),
tf.keras.layers.BatchNormalization()
])
model.build()
print("All weights:", len(model.weights))
print("Trainable:", len(model.trainable_weights))
print("Non-trainable:", len(model.non_trainable_weights))
Результат выполнения кода:
"All weights: 6"
"Trainable: 4"
"Non-trainable: 2"
Смотрите также
-
класс
Model,
который представляет собой базовый класс для моделей -
атрибут
trainable_weights,
который содержит список обучаемых весов модели -
атрибут
non_trainable_weights,
который содержит список необучаемых весов модели -
метод
get_weights,
который возвращает значения весов в виде NumPy-массивов