tensorflow2caffe(2) : 如何在tensorflow中取出模型参数

   经过一段时间,笔者又回来了!

   从2017年7月开始,笔者结束了研一繁重的考试月任务(因为平常不常上课,突击考试大家懂的),然后就进入了研二生涯。在七八月笔者就开始了自己的课题实验(由于太忙累坏了身体,先是眼睛不太好,然后又犯了胃病被迫去做胃镜,在此深切提醒各位,工作的时候不能太拼,身体很重要)。研二生涯笔者在实验室又要做学术又要兼顾项目,因此相当繁忙。但是笔者向大家做下承诺,一定不放弃博客的更新,笔者会在第一时间将自己的实验经验与小技巧科普给大家。


   废话少说,下面开启正题!


   还记得我们的上一篇博客吗?讲述了caffemodel到底记录了什么,那么,笔者带领大家回顾一下我们目前做的是什么工程:目前是将一个模型在tensorflow下面训练,然后转换到caffe框架上执行,这样,模型就可以在嵌入式平台上面运作了(nvidia TX2,nvidia TK1等)。我们在tensorflow2caffe(1)中,已经讲述了如何搞清楚caffemodel里面记录了什么,也就弄明白了我们的数据转换目标。那么,待转换的数据从哪里来呢?从tensorflow中来对吧。那么,针对tensoeflow训练所得的结果,我们来看一下我们得到了什么:



   从上图中,我们看到,tensorflow框架训练得到的结果里面,首先有一个checkpoint,这是一个训练结果的索引,从这个里面,我们可以看到我们保存了哪些模型?(对应保存模型的程序在tensorflow的训练程序中,笔者就比较爱使用tf.Train.Saver.save接口存储模型参数),ckeckpoint文件可以被打开,我们可以看看里面记录了什么。


   大家可以看到,里面记录的是这个我们在训练不同阶段保存的模型。首先大家要记住,这是一个很有用的文件。


   然后,在图1中,我们发现了还有其他类型的文件,首先有一个.meta文件,了解tensorflow的同学知道,这是一个记录Graph的文件,在tensorflow中,Graph记录了所有数据的流向,规定了整个模型的结构。然后有一种data-00000-of-00001结构的文件,这个文件比较大(往往几十上百M),这个文件是记录了我们训练得到的数据,是以压缩性形式存储的。还有一个index类型的文件,这个文件是做什么的?这个文件记录了数据的index,就是需要提取参数的时候,在meta文件中找到了参数名,然后通过这个index,再从训练数据文件中提取数据具体的值。还有一个events文件,记录了一些其他日志。


   那么,到这里,我们就明白了如何去提取出tensorflow的训练参数。

   (1)载入数据流图

   (2)通过checkpoint找到目前最新的训练保存结果

   (3)提取训练得到的所有参数

   具体代码如下:

 

#!/usr/bin/python

import tensorflow as tf
import numpy as np

with tf.Session() as sess:
    new_saver = tf.train.import_meta_graph('model.ckpt-189200.meta') #load graph
    for var in tf.trainable_variables(): #get the param names
        print var.name #print parameters' names
        new_saver.restore(sess, tf.train.latest_checkpoint('./')) #find the newest training result
        all_vars = tf.trainable_variables()
        for v in all_vars:
            v_4d = np.array(sess.run(v)) #get the real parameters

   在上面的代码中,tf.train.import_meta_graph导入了训练数据流图,tf,train.latest_checkpoint找到了最新的训练数据,还打印了参数名字,并且最后使用sess.run(v)得到了各个参数。

   我们运行一下代码,大家可以看到,参数名称源源不断地打印出来。

 

   在我们找到参数之后,下面,我们就要把tensorflow框架格式规定的参数转化为caffe框架规定格式规范的参数,具体该怎么做,且听下回分解。



   欢迎阅读笔者后续博客,各位读者朋友的支持与鼓励是我最大的动力!


written by jiong

岂能尽如人意,但求无愧于心

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值