Я использую tf.keras.layers.Layer
для создания своих пользовательских моделей. Я могу успешно сохранить контрольные точки, но не могу восстановить их. Ниже приведен мой скрипт восстановления.
class Net(tf.keras.layers.Layer):
def __init__(self):
super(Net, self).__init__()
self.l1 = tf.keras.layers.Dense(5)
def call(self, x):
return self.l1(x)
net=Net()
opt = tf.keras.optimizers.Adam(0.1)
ckpt = tf.train.Checkpoint(step=tf.Variable(1), optimizer=opt, net=net)
manager = tf.train.CheckpointManager(ckpt, '/resources/checkpoints_test2', max_to_keep=3)
dt = np.arange(10,dtype=np.float32)[:,None]
with tf.Session() as sess_inf:
ckpt.restore(manager.latest_checkpoint)
nn = ckpt.net
oo = ckpt.optimizer
op = nn(dt)
print(net.get_weights())
print(opt.get_weights())
Я получаю случайные веса для net
и пустой список для opt
. И если я прокомментирую строку op = nn(dt)
, то также веса net
будут пустыми. Я знаю, что в tf.keras.layers.Layer
типе восстановления моделей должно происходить между созданием переменной и ее первым использованием (упомянуто здесь) . Вот почему я добавил эту строку op = nn(dt)
. Но это должно было восстановить вес модели, но я просто получил случайные веса. Что я делаю не так?