【问题标题】:How to restore a saved tensorflow model?如何恢复保存的张量流模型?
【发布时间】:2017-05-07 09:45:09
【问题描述】:

有两个python文件,第一个用于保存tensorflow 模型。第二个是恢复保存的模型。

问题:

  1. 当我一个接一个地运行这两个文件时,就可以了。

  2. 当我运行第一个时,重新启动编辑并运行第二个,它 告诉我 w1 没有定义?

我想做的是:

  1. 保存一个张量流模型

  2. 恢复保存的模型

它有什么问题?感谢您的热心帮助?

model_save.py

import tensorflow as tf
w1 = tf.Variable(tf.random_normal(shape=[2]), name='w1')
w2 = tf.Variable(tf.random_normal(shape=[5]), name='w2')
saver = tf.train.Saver()

with tf.Session() as sess: 
sess.run(tf.global_variables_initializer())
saver.save(sess, 'SR\\my-model')

model_restore.py

import tensorflow as tf

with tf.Session() as sess:    
saver = tf.train.import_meta_graph('SR\\my-model.meta')
saver.restore(sess,'SR\\my-model')
print (sess.run(w1))

【问题讨论】:

    标签: save restore


    【解决方案1】:

    简而言之,你应该使用

    print (sess.run(tf.get_default_graph().get_tensor_by_name('w1:0')))
    

    而不是 model_restore.py 文件中的 print (sess.run(w1))。

    model_save.py

    import tensorflow as tf
    w1_node = tf.Variable(tf.random_normal(shape=[2]), name='w1')
    w2_node = tf.Variable(tf.random_normal(shape=[5]), name='w2')
    saver = tf.train.Saver()
    
    with tf.Session() as sess:
      sess.run(tf.global_variables_initializer())
      print(w1_node.eval()) # [ 0.43350926  1.02784836]
      #print(w1.eval()) # NameError: name 'w1' is not defined
      saver.save(sess, 'my-model')
    

    w1_node只定义在model_save.py中,model_restore.py文件无法识别。 当我们通过name 调用Tensor 变量时,我们应该使用get_tensor_by_name,正如这篇文章Tensorflow: How to get a tensor by name? 所建议的那样。

    model_restore.py

    import tensorflow as tf
    
    with tf.Session() as sess:
      saver = tf.train.import_meta_graph('my-model.meta')
      saver.restore(sess,'my-model')
      print (sess.run(tf.get_default_graph().get_tensor_by_name('w1:0')))
      # [ 0.43350926  1.02784836]
      print(tf.global_variables()) # print tensor variables
      # [<tf.Variable 'w1:0' shape=(2,) dtype=float32_ref>,
      #  <tf.Variable 'w2:0' shape=(5,) dtype=float32_ref>]
      for op in tf.get_default_graph().get_operations():
        print str(op.name) # print all the operation nodes' name
    

    【讨论】:

    • 感谢您的友好回答。根据您的建议和相关参考,我刚刚解决了这个问题:)
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多