代码之家  ›  专栏  ›  技术社区  ›  Hasnat

无法在caffe中使用PReLU进行训练/微调

  •  1
  • Hasnat  · 技术社区  · 9 年前

    我正在用深度神经网络进行人脸识别。我正在使用 CASIA-webface 10575个课程的数据库,用于训练深度CNN(由CASIA使用,请参阅 paper 有关详细信息,请参见10个卷积层、5个池层和1个完全连接层。用于激活 "ReLU" 作用我能够使用 并取得了预期的性能。

    我的问题是, 我无法使用 "PReLU" 激活 起初,我认为 “ReLU” 具有 “PReLU” 将完成这项工作。然而,没有 微调 (来自caffemodel “ReLU” )和 从头开始学习 战略奏效了。

    为了简化学习问题,我仅用50节课就大大减少了训练数据集。然而,CNN却无法学习 “PReLU” ,而它能够学习 “ReLU” .

    为了了解我的咖啡与 “PReLU” ,我通过运行简单的网络( “ReLU” “PReLU” )使用cifar10数据,它可以工作。

    我想从社区了解是否有人有类似的观察结果。或者如果有人能提供任何建议来克服这个问题。

    3 回复  |  直到 9 年前
        1
  •  2
  •   demongolem    8 年前

    主要区别在于 "ReLU" "PReLU" 激活是后一个激活函数对于输入的负值有一个非零斜率,并且这个斜率可以从数据中得知。据观察,这些特性使训练对权重的随机初始化更具鲁棒性。
    我用过 “PReLU” 激活最初使用训练的微调网络 “ReLU” s和我经历了更快、更稳健的融合。

    我的建议是更换 “ReLU” 具有以下配置

    layer {
      name: "prelu"
      type: "PReLU"
      bottom: "my_bottom"
      top: "my_bottom" # you can make it "in-place" to save memory
      param { lr_mult: 1 decay_mult: 0 }
      prelu_param { 
        filler: { type: "constant" val: 0 } 
        channel_shared: false
      }
    }
    

    请注意,通过将负斜率初始化为0 “PReLU” 激活实际上与 “ReLU” 因此,您可以从与原始网络完全相同的位置开始微调。

    还要注意,我显式地设置了学习速率和衰减速率系数(分别为1和0)——您可能需要稍微调整这些参数,但我认为设置 decay_weight 除零以外的任何值都是不明智的。

        2
  •  1
  •   Prophecies    9 年前

    我能够在我的网络中使用PReLu进行良好的训练,尽管精度比使用ReLu低一些。是的,我只是把ReLu换成了PReLu。

    然而,我几乎一直注意到,PReLU的收敛速度比ReLu快得多。所以,也许你需要降低你的学习率?

        3
  •  1
  •   Prune    9 年前

    两个基本观察结果:

    • PReLU不能保证产生比ReLU更准确的结果。它与ImageNet上的AlexNet合作效果更好,但这仅仅意味着进一步的研究和改进;它不一定会转移到其他应用程序。
    • CIFAR、ImageNet和CASIA网页是不同的应用程序。

    你已经做了正确的第一步,改变学习速度。接下来,我将尝试调整命令行参数:更改收敛ε、动量、权重衰减或其他内部优化参数。有时,即使是很小的拓扑更改,也需要进行一些调整。

    更改输入批次大小。是否允许您以其他方式更改拓扑,例如更改卷积层?您可能会看到使用不同的CONV2过滤器方法会得到什么。