美文网首页深入理解tensorflowTensorflow从入门到精通
导入模型的checkpoint后同样数据多次运算结果不同

导入模型的checkpoint后同样数据多次运算结果不同

作者: 马小李23 | 来源:发表于2018-09-27 14:20 被阅读24次

最近在做实验的时候遇到,代码需要运用已经训练好的模型,进行一些数据的计算,并给出计算结果,这部分代码的结构大致如下:

# new tensor define
new_tensor = …
# old model defin
old_model = model()
# load checkpoint
var_to_restore = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope=…)
restorer_attrib = tf.train.Saver(var_to_restore)
ckpt = tf.train.get_checkpoint_state(…)  
if ckpt and ckpt.model_checkpoint_path:
restorer_attrib.restore(sess, ckpt.model_checkpoint_path)
…
# initial value
sess.run(tf.global_variables_initializer())
# run sess get value
sess.run([…])

但是代码在运行的时候发现,同样一组数据,每次运行代码后,获得的从之前训练好的模型中得到的输出,每次运行结果都不同,检查中发现系列问题:
1.使用的TensorFlow中的tensorflow.contrib.slim.nets中的resnet_v2中,在定义resnet_v2中,测试中需要将is_training参数设置为False
2.测试中,要将网络中使用的tf.nn.dropout的keep_prob为1
在设置完这些内容后,发现依旧还是每次获得不同结果,经过仔细检查发现问题来源在于,在load checkpoint的代码完成之后,代码中运行了下列代码
sess.run(tf.global_variables_initializer())
这样导致,载入的checkpoint的数据失效,所有数据重新进行了初始化,导致模型是个随机的取值,从而每次运行获得的结果不同。
解决的办法也很简单,在load checkpoint的操作之前,先运行初始化的代码,然后再导入checkpoint.
正确的代码结构应该如下:

# new tensor define
new_tensor = …
# old model defin
old_model = model()

# initial value
sess.run(tf.global_variables_initializer())

# load checkpoint
var_to_restore = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope=…)
restorer_attrib = tf.train.Saver(var_to_restore)
ckpt = tf.train.get_checkpoint_state(…)  
if ckpt and ckpt.model_checkpoint_path:
restorer_attrib.restore(sess, ckpt.model_checkpoint_path)
…
# run sess get value
sess.run([…])

相关文章

  • 导入模型的checkpoint后同样数据多次运算结果不同

    最近在做实验的时候遇到,代码需要运用已经训练好的模型,进行一些数据的计算,并给出计算结果,这部分代码的结构大致如下...

  • tensorflow教程6:Supervisor长期训练帮手

    使用TensorFlow训练一个模型,可以多次运行训练操作,并在完成后保存训练参数的检查点(checkpoint)...

  • Day11:K-NN案例

    数据下载 一、数据预处理 导入库 导入数据 分割数据集 数据标准化 二、训练K-NN模型 三、预测测试集结果 四、...

  • 五.前馈运算和反馈运算

    前馈运算 无论训练模型时计算误差还是模型训练完毕后获得样本预测,卷积神经网络的前馈运算都较直观。同样以图像分类任务...

  • 2021-04-09 MySQL生成列(Generated Co

    使用限制 支持常量,确定的内置函数及运算符。(确定性函数:对于给定的表里的数据,不同用户多次调用返回相同结果;不确...

  • 第七章 模型的获取和改进

    数据 + 算法 => 模型将数据使用某种算法进行运算的到模型,这个运算的过程被称作训练或者学习。 构建模型的步骤:...

  • Hash&对称加密

    Hash的特点 算法是公开的 对相同数据运算,得到的结果是一样的 对不同数据运算,如MD5得到的结果默认是128位...

  • 类型转换

    自动类型转化 在算术表达式中, 相同类型数据的运算结果的类型还是该类型 在算术表达式中, 不同类型数据的运算结果的...

  • scipy.io 和 numpy存储矩阵方法的差异

    对两种save 方法进行比较比较结果,同样的数据,通过.mat 存储后在导入变成了二维的,因为matlab对[4,...

  • Kuiper 中使用 Golang 模版 (template)

    简介 用户通过 Kuiper 进行数据分析处理后,使用各种 sink 可以往不同的系统发送数据分析结果。针对同样的...

网友评论

    本文标题:导入模型的checkpoint后同样数据多次运算结果不同

    本文链接:https://www.haomeiwen.com/subject/gqeeoftx.html