zoukankan      html  css  js  c++  java
  • caffe怎么把全连接层转成convolutional层

    caffe中有把fc层转化为conv层的,其实怎么看参数都是不变的,对alex模型来说,第一个fc层的参数是4096X9216,而conv的维度是4096x256x6x6,因此参数个数是不变的,只是需要把fc的参数存储方法改变成conv 的。

    在caffe的官方网站:http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb

    有说明怎么转换。首先将原模型加载进来fc_param,然后把全conv的配置文件和模型加载conv_param,然后将fc_param进行flat并赋值给conv_param,当然在flat时会按照conv_param的格式进行赋值。然后我们就完成了全conv的模型生成,此时再把模型保存下来,就完成了模型转换为全conv的模型的过程。

    然后在我们使用full conv模型时,只要加载就可以了。

    不过就像我同事说的,代码里存储方式其实都是连续地址存放,维度的不一样只是在初始化blob取值时,选择的方式不一样。一种是直接按照4096个9216取,一种是按照4096个256X6X6取值,就是说取值时赋值给一个256x6x6的数组,而第一种是赋值给1x1x9216维度的数组。

    在caffe的官网上,初始化权重时,原来是先做reshape,再赋值,现在是不reshape,直接flat赋值。应该是python对数组的操作方式不同吧?

    转载请注明出处,谢谢。
  • 相关阅读:
    缓存架构设计细节二三事
    啥,又要为表增加一列属性?
    SpringMvc4.x---快捷的ViewController
    SpringMvc4.x--@ControllerAdvice注解
    SpringMvc4.x--Spring MVC的常用注解
    解决svn--Unable to connect to a repository at URL ‘https://xxxxxx’ 问题
    或许你不知道的10条SQL技巧
    Java 基础-运算符
    Java 运算符 % 和 /
    Java基础-注释
  • 原文地址:https://www.cnblogs.com/jianyingzhou/p/4482138.html
Copyright © 2011-2022 走看看