Чтение весов в TensorFlow
Если собрать модель с той же формой
слоями, что и при записи, параметры
с диска подставляет метод
load_weights. Путь к файлу
должен указывать на результат
метода save_weights.
Сохраним список параметров, запишем его в файл, создадим вторую модель и загрузим числа обратно. Сравним одну ячейку матрицы до и после чтения с тем, что было сохранено:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(2, input_shape=(3,)),
])
model(tf.constant([[1.0, 2.0, 3.0]]))
stored = model.get_weights()
model.save_weights("weights.weights.h5")
tf.keras.utils.set_random_seed(1)
other = tf.keras.Sequential([
tf.keras.layers.Dense(2, input_shape=(3,)),
])
other(tf.constant([[0.0, 0.0, 0.0]]))
other.load_weights("weights.weights.h5")
print(other.get_weights()[0][0, 0])
print(stored[0][0, 0])
# выведет 0.034362674
# выведет 0.034362674
Читать можно и после того, как новая модель уже обработала данные со своими начальными числами: загрузка заменит параметры содержимым файла. Имя файла в примере короткое, он лежит в рабочей папке запуска.
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
source = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(2,)),
])
source(tf.constant([[1.0, 0.0]]))
snapshot = source.get_weights()
source.save_weights("one.weights.h5")
target = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(2,)),
])
target(tf.constant([[5.0, 5.0]]))
target.load_weights("one.weights.h5")
print(target.get_weights()[0][0, 0])
print(snapshot[0][0, 0])
# выведет 0.04436207
# выведет 0.04436207
Подготовьте модель с одним блоком
на 2 выхода для трёх
признаков. Сохраните параметры
в lab.weights.h5, соберите
вторую такую же цепочку, прогоните
любую строку и подставьте числа
из файла. Выведите элемент
[0, 0] матрицы первого
слоя.
Запишите параметры модели с блоком
на 1 выход для 4
признаков после одного
прогона в tiny.weights.h5.
Создайте новую модель той же
формы, загрузите файл и выведите
единственное смещение блока.
Соберите двухслойную цепочку:
сначала 2 выхода для
3 признаков, затем
1 выход,
сохраните веса в pair.weights.h5.
На копии модели прочитайте файл
и выведите форму матрицы первого
блока после подстановки.