V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skyduy
V2EX  ›  Caffe

关于 caffe 中卷积层 filter 的一个小疑问,求解答~~~~

  •  
  •   skyduy · 2015-09-10 16:50:04 +08:00 · 8461 次点击
    这是一个创建于 3344 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大神你们好,对于下面的一个 layer 模型:
    layer {
      name: "conv1"
      type: "Convolution"
      bottom: "data"
      top: "conv1"

      param { lr_mult: 1   decay_mult: 1 }
      param { lr_mult: 2   decay_mult: 0 }

      convolution_param {
       num_output: 96
       kernel_size: 11
       stride: 4
       weight_filler {type: "gaussian"   std: 0.01 }
       bias_filler   {type: "constant"   value: 0}
     }
    }

    之前我看了 UFLDL 教程,那里 filter 是事先通过同类的 training set 经过 Sparse Autoencoder 的得出的(模拟人类识别图像时,只有少部分神经活跃),自编码时 loss function 中还有个 KL_divergence 判罚,但这里使用的 loss function 没有该项。
    此外,对 filter 进行配置的 weight_filler 和 bias_filler 是什么作用?是进行初始化的吗?
     如果是,那 weight_filter 里面的 type 又是干嘛的?
     如果不是, loss function 和 solvers 都已经给出了,这一项又有什么作用?
    17 条回复    2015-09-13 23:28:06 +08:00
    nbndco
        1
    nbndco  
       2015-09-10 17:37:14 +08:00 via iPhone
    你还是先对 cnn 有个概念再来弄 caffe 吧,你这里连个 loss 都没有, solver 和初始化有什么关系
    xunyu
        2
    xunyu  
       2015-09-10 18:31:17 +08:00 via Android
    filter 是阈值,不是初始化,不敢确定你的模型是哪个
    skyduy
        3
    skyduy  
    OP
       2015-09-11 08:40:45 +08:00
    @nbndco 我这里只放了一个 layer 层,我的初始化的意思是, W 和 b 的初始值
    skyduy
        4
    skyduy  
    OP
       2015-09-11 08:58:15 +08:00
    @nbndco 我看 caffe 教程里的, loss 默认使用了 L (W )≈1/N∑fW (X (i ))+λr (W ) , solvers 有 SGD ADAGRAD NESTEROV ,我现在最想不通的就是用来卷积的 filter 到底是通过什么优化得到的,毕竟一个 filter 意味着提取某一个 feature ,我之前说了通过 Sparse Autoencoder 可以模拟人脑提取特征,但这里完全没有出现它的影子,而且还出现了新的 weight_filter 和 type...求不嫌麻烦解释一下...万分感谢
    skyduy
        5
    skyduy  
    OP
       2015-09-11 09:00:09 +08:00
    发现一个神器: Keras.
    nbndco
        6
    nbndco  
       2015-09-11 09:10:16 +08:00 via iPhone
    @skyduy autoencoder 是 unsupervised 学习,自然不需要任何其他信息, cnn 是 supervised ,你要有一个目标,由 loss 层表示
    nbndco
        7
    nbndco  
       2015-09-11 09:11:31 +08:00 via iPhone
    weight 就是连接权重,初始化用了 gaussian 随机采样,都是最常见的方式
    ihciah
        8
    ihciah  
       2015-09-11 09:15:00 +08:00
    远程围观
    skyduy
        9
    skyduy  
    OP
       2015-09-11 09:15:52 +08:00
    @nbndco 噢!那 filter 在这里不是隐含着通过 unsupervised learning 得到的吗?
    skyduy
        10
    skyduy  
    OP
       2015-09-11 09:16:10 +08:00
    @ihciah 你来的好及时。。。
    skyduy
        11
    skyduy  
    OP
       2015-09-11 09:17:02 +08:00
    忘记 @xunyu 了...请看一下 4 楼回复... Orz
    nbndco
        12
    nbndco  
       2015-09-11 09:21:54 +08:00 via iPhone
    @skyduy 这里必须要 supervise , cnn 基本没有办法 unsupervise
    skyduy
        13
    skyduy  
    OP
       2015-09-11 09:31:37 +08:00
    @nbndco 嗯,这里有 supervise...难道 filter 的获取也要根据定义的 model 通过从 input 到最终的 label supervise 到?
    还有 autoencoder 不也可以把 label 看成是 input 的 supervise 吗?
    xunyu
        14
    xunyu  
       2015-09-11 09:57:48 +08:00
    深度学习里的人脑特征主要是通过非线性提现的,在教材里是 sigmoid 或 tan 函数处理后的非线性通过 bptt 调参,你最好把整个模型都贴出来,这个层的激活函数是哪个, filler 就是 filter 的功能没啥其他功能的
    skyduy
        15
    skyduy  
    OP
       2015-09-11 10:55:35 +08:00 via Android
    @xunyu
    @nbndco
    谢谢,参照 http://blog.csdn.net/whiteinblue/article/details/43083815 问题已经解决,这里采用的 filter 是 gaussian filter , type 就是用来指定 filter 类型的,和我说的那个自编码出来的 filter 没有冲突,而不同的 filter 在具体的问题也应该会出现不同的结果。
    再次谢谢。
    nbndco
        16
    nbndco  
       2015-09-11 11:56:12 +08:00
    @skyduy 这里只是有个初始化的 filler ,不是 filter ,初始化的方式很多, gaussian 只是最常见的一种,和网络结构完全无关。
    由于性能原因,现在的神经网络的非线性体现在 RELU ,早已经不使用任何 sigmoid 。
    个人建议还是从基本一点的开始学习理解。
    skyduy
        17
    skyduy  
    OP
       2015-09-13 23:28:06 +08:00 via Android
    @nbndco 这两天一直在用 win10 配置 caffe ,没来逛 v2😲 还是谢谢你的忠告,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.