Tensorflow从Saver保存的模型中提取所需权重的批处理方法

编写于2019/11/22

该方法适用于tensorflow中保存为ckpt文件的模型,最好是保存了所有参数和图的模型

 

import numpy as np
import tensorflow as tf
import scipy.io as sio
import os

with tf.Session() as sess:
    # load the meta graph and weights
    
    saver = tf.train.import_meta_graph('./logs/enet-clip1/model.ckpt-21390.meta')#键入模型名称.meta文件
    saver.restore(sess, tf.train.latest_checkpoint('./logs/enet-clip1/'))#从checkpoints中恢复最新模型
    graph = tf.get_default_graph()#得到模型的默认图
    #按名字获得某一个参数并保存
#     conv1_w = sess.run(graph.get_tensor_by_name('Conv1/W_conv1/W_conv1:0'))
#     sio.savemat("./net/cnn_for_mnist/weights/conv1_w.mat", {"array": conv1_w})
    
    #从中挑选模型参数,我所需的参数是所有的trainable_variables,以及非训练参数中的moving_mean,moving_variance,根据名称索引
    var_list = tf.trainable_variables()
    g_list = tf.global_variables()
    bn_moving_vars = [g for g in g_list if 'moving_mean' in g.name]
    bn_moving_vars += [g for g in g_list if 'moving_variance' in g.name]
    variable_names =var_list + bn_moving_vars

    #打印出所需参数的name,shape,info,value
    values = sess.run(variable_names)
    cnt = 0
    for k,v in zip(variable_names, values):
        print("Variable: ", k)
        print("Shape: ", v.shape)
        path = ('./logs/enet-clip1/parameters/'+k.name).rstrip(':0')
        if not os.path.exists(path):
            os.makedirs(path)
            sio.savemat(path + '/{:s}.mat'.format(k.name.rstrip(':0').replace('/','-')), {'array': v})#保存需要的参数
        else:
            print('path existd!',path)
        if 'ENet/bottleneck1_0_batch_norm1' in k.name:#选择性打印我所需的参数
            print(v)
        cnt+=1

    print('cnt:',cnt)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值