Восстановление веса из модели tf.keras.layers.Layer - PullRequest
0 голосов
/ 24 октября 2019

Я использую 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). Но это должно было восстановить вес модели, но я просто получил случайные веса. Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...