caffe中的L2正规化,来自千层面的转换

时间:2017-01-11 07:40:29

标签: deep-learning caffe lasagne regularized

我有一个lasagane代码。我想用caffe创建相同的网络。我可以转换网络。但我需要有关千层面超参数的帮助。烤宽面条中的超参数看起来像:

lr = 1e-2
weight_decay = 1e-5

prediction = lasagne.layers.get_output(net['out'])
loss = T.mean(lasagne.objectives.squared_error(prediction, target_var))

weightsl2 = lasagne.regularization.regularize_network_params(net['out'], lasagne.regularization.l2)
loss += weight_decay * weightsl2

如何在caffe中执行L2正则化部分?在每个卷积/内积层之后,我是否必须添加任何层进行正则化?我的solver.prototxt中的相关部分如下:

base_lr: 0.01
lr_policy: "fixed"
weight_decay: 0.00001
regularization_type: "L2"
stepsize: 300
gamma: 0.1  
max_iter: 2000
momentum: 0.9

也发布在http://datascience.stackexchange.com。等待答案。

1 个答案:

答案 0 :(得分:2)

好像你已经做对了。
regularization_type: "L2"元参数与'solver.prototxt'中的L2结合使用weight_decay = 1e-5告诉caffe使用param { decay_mult: 1 } "InnerProduct"进行正则化。

您可能想要调整的另一件事是正则化对每个参数的影响程度。您可以通过

为网络中的每个参数blob设置此
layer {
  type: "InnerProduct"
  name: "fc1"
  # bottom and top here
  inner_product_param { 
    bias_term: true
    # ... other params
  }
  param { decay_mult: 1 } # for weights use regularization
  param { decay_mult: 0 } # do not regularize the bias
}

例如,带偏差的decay_mult图层有两个参数:

stub_status

默认情况下,location /stats { stub_status on; access_log off; allow 127.0.0.1; deny all; } 设置为1,也就是说,网络的所有权重都是相同的。您可以更改它以规范更多/更少特定参数blob。