Python 恢复训练过的tensorflow模型,编辑与节点关联的值,然后保存它
我用tensorflow训练了一个模型,并在训练过程中使用了批量规范化。批量规范化要求用户传递一个布尔值,称为Python 恢复训练过的tensorflow模型,编辑与节点关联的值,然后保存它,python,machine-learning,tensorflow,deep-learning,batch-normalization,Python,Machine Learning,Tensorflow,Deep Learning,Batch Normalization,我用tensorflow训练了一个模型,并在训练过程中使用了批量规范化。批量规范化要求用户传递一个布尔值,称为is_training,以设置模型是处于培训阶段还是测试阶段 当模型被训练时,is\u training被设置为常数,如下所示 is_training = tf.constant(True, dtype=tf.bool, name='is_training') 我保存了经过训练的模型,文件包括checkpoint、.meta文件、.index文件和a.data。我想恢复模型并使用它运行
is_training
,以设置模型是处于培训阶段还是测试阶段
当模型被训练时,is\u training
被设置为常数,如下所示
is_training = tf.constant(True, dtype=tf.bool, name='is_training')
我保存了经过训练的模型,文件包括checkpoint、.meta文件、.index文件和a.data。我想恢复模型并使用它运行推理。
模型无法重新训练。因此,我想恢复现有模型,将is\u training
的值设置为False
,然后将模型保存回去。
如何编辑与该节点关联的布尔值并再次保存模型?您可以使用的
input\u map
参数将图形张量重新映射到更新的值
config = tf.ConfigProto(allow_soft_placement=True)
with tf.Session(config=config) as sess:
# define the new is_training tensor
is_training = tf.constant(False, dtype=tf.bool, name='is_training')
# now import the graph using the .meta file of the checkpoint
saver = tf.train.import_meta_graph(
'/path/to/model.meta', input_map={'is_training:0':is_training})
# restore all weights using the model checkpoint
saver.restore(sess, '/path/to/model')
# save updated graph and variables values
saver.save(sess, '/path/to/new-model-name')
如果使用
is_training=tf.Variable..
而不是constantIs,则会更容易。为什么is_training
需要是tensorflow常量?难道不是一个巨蟒之躯吗?请注意,将is_training
更改为python bool不会在恢复模型时产生错误。@GeertH可能是这样,问题是如何在加载模型后将is_training
设置为False
,然后将其保存回去。因此,当再次还原时,节点的值为False
。上面的代码会抛出一个错误ValueError:tf。如果使用input\u map,则import\u graph\u def()需要一个非空名称
我已经使用tensorflow==1.2.0
测试了此代码,希望对您有所帮助;它也不是tf.import\u graph\u def
。查看我的代码。我按原样尝试了您的代码,错误是由这一行引发的,saver=tf.train.import\u meta\graph(r'D:\code\iprings\k-fold-model\VanillaCNN\u 24.0000.meta',input\u map={'is\u training':is\u training})
我建议您使用tf==1.2.0