tensorflow 转 caffe(2)

时间:2024-04-09 09:20:24

转自:https://blog.csdn.net/jiongnima/article/details/78326515

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

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

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

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

tensorflow 转 caffe(2)

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

tensorflow 转 caffe(2)

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

   然后,在图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(2)

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

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

written by jiong

岂能尽如人意,但求无愧于心
————————————————
版权声明:本文为CSDN博主「jiongnima」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiongnima/article/details/78326515