Python 将Tensorflow v1模型权重加载到Tensorflow Core 2.0 alpha模型中(这是一个tf.keras.model)

Python 将Tensorflow v1模型权重加载到Tensorflow Core 2.0 alpha模型中(这是一个tf.keras.model),python,python-3.x,tensorflow,Python,Python 3.x,Tensorflow,我有一个使用tf.train.Saver()创建的检查点。我目前正在将代码库更新为Tensorflow v2.0,该版本使用了急切执行,我正在尝试将该检查点加载到tf.keras.Model中 model = MyModel() model.load_weights(checkpoint_path) 但是,这会引发以下错误: NotImplementedError:不支持从基于名称的检查点进行流式还原。如果此限制困扰您,请提交功能请求 我还尝试使用CheckpointManag

我有一个使用tf.train.Saver()创建的检查点。我目前正在将代码库更新为Tensorflow v2.0,该版本使用了急切执行,我正在尝试将该检查点加载到tf.keras.Model中

    model = MyModel()
    model.load_weights(checkpoint_path)
但是,这会引发以下错误:

NotImplementedError:不支持从基于名称的检查点进行流式还原。如果此限制困扰您,请提交功能请求

我还尝试使用CheckpointManager,但没有成功

    ckpt = tf.train.Checkpoint(net=model)
    manager = tf.train.CheckpointManager(ckpt, "path/to/checkpoint_dir", max_to_keep=3)
    ckpt.restore(manager.latest_checkpoint) 
有没有办法在TF v2中使用TF v1模型权重


从头开始在ImageNet上重新训练模型确实很耗时。

您从中加载的v1模型也是tf.keras.model吗?如果是这样,那么从v1使用tf.train.Checkpoint保存并在v2中使用匹配的tf.train.Checkpoint加载可能会更容易。这样一来,变量名是否更改就无关紧要了。不幸的是,v1模型不是tf.keras.model。最后我做的是首先将模型作为dict加载,tf.compat.v1正好加载到TF2模型定义的图中。然后,手动执行layer.set_为每个网络层设置权重。整个过程是非常困难和痛苦的。我真的希望Tensorflow会发布关于更好的方法的指导方针,因为在不久的将来,当TF1支持停止时,这将是一个非常普遍的问题。我没有把这列为一个答案,因为我的方法很粗糙。你找到解决问题的方法了吗?我渴望转变的需要@是的,我手动为每个网络层设置了层的权重。也许有更好的解决办法。但这对我来说很有效。