更新:“ AttributeError:'AdamOptimizer'对象没有属性'name'”可能是此问题的替代标题。如果这可以解决,那么整个事情可能会正常进行。
有一个没有模型保存代码的新jupyter笔记本。训练好的模型已经使用另一个笔记本保存了。在这里使用了虹膜数据集,并且对模型都进行了训练:
#This might be the way:
#https://www.tensorflow.org/guide/eager#object_based_saving
#https://stackoverflow.com/questions/47852516/tensorflow-eager-mode-how-to-restore-a-model-from-a-checkpoint
savePrefix = "/tmp/iris"
root = tfe.Checkpoint(optimizer=optimizer, model=model, optimizer_step=global_step)
restorePrefix = root.save(savePrefix)
# '/tmp/iris-1'
print(restorePrefix)
print(root)
print("The model was saved to {}\nRestore the model using {}".format(savePrefix, restorePrefix))
# Try loading this in a different notebook to prove it worked.
>/tmp/iris-1
><tensorflow.contrib.eager.python.checkpointable_utils.Checkpoint object at 0x7fb308799e80>
>The model was saved to /tmp/iris
>Restore the model using /tmp/iris-1
我从上面获取了输出路径,然后尝试使用tf.contrib.eager代码将模型加载到新笔记本中,但失败了:
s = tfe.Saver([optimizer, model, global_step])
s.restore(file_prefix="/tmp/iris-1")
>NameError: name 'optimizer' is not defined
当模型加载笔记本中的代码没有保存模型并且没有模型时,用tf.contrib.eager api(不是会话api)加载以前开发的模型的实际工作用例代码是什么?模型的内存部分已经像优化器,图形定义和global_state一样?
TF文档始终选择演示毫无意义的示例,以加载我们已经在内存中存储的模型。我无法确定“使用TF.contrib.eager API,您是否必须在笔记本中拥有显式的模型创建代码,优化器创建代码和全局步骤代码,因为TFE无法从磁盘加载这些东西”或“它是一个新的API”并且缺少某些功能”,或“您还必须同时使用会话和图形编码api以及tf.contrib.eager api”或“仅使用实际上与命令性代码一起使用的Microsoft cntk,他们并没有忘记API的关键部分” 。
如果您知道什么,谢谢。如果进行推测,请说明。
我想这是下面的一些超集和子集组合,如果它能起作用的话。 (从有关该主题的SO帖子中删除。)
tfe.restore_variables_on_create
tf.train.import_meta_graph()
new_saver.restore()
tf.train.latest_checkpoint()
tfe.save_network_checkpoint()
tfe.restore_network_checkpoint()
更新-我添加了代码,首先手动将模型,优化器等重新创建到内存中,然后运行restore()代码。错误-优化器没有名称。但是,奇怪的是,根据文档,它实际上确实具有name属性:
#OK I'll just try to use code to create the model artifacts first.
# I'd rather load it all from disk but maybe at least it might work.
optimizer = tf.train.AdamOptimizer() #ga
global_step = tf.train.get_or_create_global_step() # what is a global_step?
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation=tf.nn.relu, input_shape=(4,)), # input shape required
tf.keras.layers.Dense(10, activation=tf.nn.relu, kernel_initializer='glorot_uniform'),
tf.keras.layers.Dense(3)
])
s = tfe.Saver([optimizer, model, global_step])
s.restore(file_prefix="/tmp/iris-1")
INFO:tensorflow:从/ tmp / iris-1恢复参数
AttributeError:“ AdamOptimizer”对象没有属性“名称”
文档说:
__init__(
learning_rate=0.001,
beta1=0.9,
beta2=0.999,
epsilon=1e-08,
use_locking=False,
name='Adam'
)
肯定看起来亚当优化器已经有了名称!那很好笑。那是什么问题呢?
也许TF错误实际上是说无法恢复优化器以及模型和global_state变量。那么从检查点还原什么-特别是在保存和相应还原中将包含哪些变量?谢谢,如果您什么都不知道。