天天看点

加载模型图_Tensorflow ckpt模型加载时的命名映射

tensorflow代码在加载ckpt模型时一般会使用如下代码:

saver = tf.train.Saver()
with tf.Session() as sess:
		saver.restore(sess, "model.ckpt")
           

那么问题来了,如果想把开源的ckpt模型加载到自己代码里不同的变量命名空间中, 应该如何操作呢?

查看tensorflow文档可以发现,

tf.train.Saver()

接受一个

var_list

参数,可以是一个

dict[str, SaveableObject]

,即一个名字到tf变量的映射,利用它即可实现模型加载时的命名映射。

举一个栗子。在kinetics-i3d代码中,有如下一段

rgb_variable_map = {}
for variable in tf.global_variables():
if variable.name.split('/')[0] == 'RGB':
  if eval_type == 'rgb600':
    rgb_variable_map[variable.name.replace(':0', '')[len('RGB/inception_i3d/'):]] = variable
  else:
    rgb_variable_map[variable.name.replace(':0', '')] = variable

rgb_saver = tf.train.Saver(var_list=rgb_variable_map, reshape=True)
           

功能是根据不同

eval_type

加载模型的时候,如果

eval_type == 'rgb600'

,就需要把待加载模型中的每个权重的名字都映射到计算图中加了

'RGB/inception_i3d/'

前缀的名字的变量。这样就实现了命名映射。

更多精彩内容,请滑至顶部点击右上角关注小宅哦~

加载模型图_Tensorflow ckpt模型加载时的命名映射

作者:dailydreamer