Tensorflow 预训练权重有选择加载参数

训练自己的模型我们一般都会使用预训练权重,有时别人训练好的模型类别与自己的不符合,这个时候就不需要加载一些层的参数.

      由于原网络权重为150类,我只需要几类,最后一层的conv带有num_class参数,所以“your name scope替换为不需要的层的name,加载模型的时候就不会加载这层的参数。

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

...........................................

restore_var = [v for v in tf.global_variables()]
variables_to_resotre = [v for v in restore_var if v.name.split('/')[0] != 'your name scope']

..............................................

ckpt = tf.train.get_checkpoint_state('./model/')
saver = tf.train.Saver(var_list=variables_to_resotre)
saver.restore(sess, ckpt.model_checkpoint_path)

下面给一段查看各个网络层参数的name scope, 便于修改。


from tensorflow.python import pywrap_tensorflow


checkpoint_path = “your ckpt path”
# Read data from checkpoint file

reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)

var_to_shape_map = reader.get_variable_to_shape_map()

# Print tensor name and values

for key in var_to_shape_map:

    print("tensor_name: ", key)

    print(reader.get_tensor(key))

 还可以使用tensorflow内置模块slim加载需要的层

exclude = ['layer1', 'layer2']
variables_to_restore = slim.get_variables_to_restore(exclude=exclude)
saver = tf.train.Saver(variables_to_restore)
saver.restore(sess, “model_path”)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值