使用tensorflow的模型文件,修改参数名称和数值,合并两个模型等

在修改保存的参数名称时,做法分为以下6步:

使用list_variables函数逐个读出已保存的参数名称
使用load_variable函数逐个读取已保存的参数值
逐个修改参数名称
使用已修改的参数名称,结合tf.Variable函数逐个重建参数
将已重建的参数逐个加入新参数列表
使用tf.train.Saver().save将新参数列表写入硬盘

import tensorflow as tf
import argparse
import os

parser = argparse.ArgumentParser(description='')

parser.add_argument("--checkpoint_path", default='../deeplab_resnet/deeplab_resnet.ckpt', help="restore ckpt") #原参数路径
parser.add_argument("--new_checkpoint_path", default='../deeplab_resnet_altered/', help="path_for_new ckpt") #新参数保存路径
parser.add_argument("--add_prefix", default='deeplab_v2/', help="prefix for addition") #新参数名称中加入的前缀名

args = parser.parse_args()


def main():
    if not os.path.exists(args.new_checkpoint_path):
        os.makedirs(args.new_checkpoint_path)
    with tf.Session() as sess:
        new_var_list=[] #新建一个空列表存储更新后的Variable变量
        for var_name, _ in tf.contrib.framework.list_variables(args.checkpoint_path): #得到checkpoint文件中所有的参数(名字,形状)元组
            var = tf.contrib.framework.load_variable(args.checkpoint_path, var_name) #得到上述参数的值

            new_name = var_name
            new_name = args.add_prefix + new_name #在这里加入了名称前缀,大家可以自由地作修改

            #除了修改参数名称,还可以修改参数值(var)

            print('Renaming %s to %s.' % (var_name, new_name))
            renamed_var = tf.Variable(var, name=new_name) #使用加入前缀的新名称重新构造了参数
            new_var_list.append(renamed_var) #把赋予新名称的参数加入空列表

        print('starting to write new checkpoint !')
        saver = tf.train.Saver(var_list=new_var_list) #构造一个保存器
        sess.run(tf.global_variables_initializer()) #初始化一下参数(这一步必做)
        model_name = 'deeplab_resnet_altered' #构造一个保存的模型名称
        checkpoint_path = os.path.join(args.new_checkpoint_path, model_name) #构造一下保存路径
        saver.save(sess, checkpoint_path) #直接进行保存
        print("done !")

if __name__ == '__main__':
    main()

 

 

 


原文:https://blog.csdn.net/jiongnima/article/details/86632517 
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值