我正在使用深度神经网络进行人脸识别。我正在使用10575类的CASIA-webface数据库来训练10个卷积,5个池和1个完全连接层的深CNN(由CASIA使用,详见paper)。对于激活,它使用"ReLU"
函数。我能够使用 caffe 成功训练它并获得所需的性能。
我的问题是,我无法使用"PReLU"
激活训练/微调相同的CNN。起初,我认为用"ReLU"
简单替换"PReLU"
就可以了。但是,微调(来自使用"ReLU"
学习的caffemodel)和从头开始学习策略都不起作用。
为了简化学习问题,我仅使用50个课程显着减少了训练数据集。但是,CNN无法通过"PReLU"
学习,而能够通过"ReLU"
学习。
为了理解我的caffe与"PReLU"
一起工作正常,我通过使用cifar10数据运行简单网络(包含"ReLU"
和"PReLU"
)来验证它,并且它可以正常工作。
我想从社区了解是否有人有类似的观察。或者,如果有人能提出任何建议来克服这个问题。
答案 0 :(得分:2)
"ReLU"
和"PReLU"
激活之间的主要区别在于后一个激活函数对于输入的负值具有非零斜率,并且可以从数据中学习该斜率。据观察,这些属性使得训练对权重的随机初始化更加稳健
我使用"PReLU"
激活来微调最初使用"ReLU"
进行训练的网络,并且我经历了更快更强大的收敛。
我的建议是使用以下配置替换"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
设置为除了<script>
$('#login_form').submit(function (e)
{
e.preventDefault();
var uname = $('#uname').val();
var upassword = $('#upassword').val();
if (uname == "" || upassword == "")
{
$('#error').show().html('All Fields are required');
} else {
$('#error').html("").hide();
$.ajax({
type: "POST",
url: "<?= base_url(); ?>User_controller/login_autho/",
// datatype: 'json',
data: {uname: uname, upassword: upassword},
success: function (data) {
if (data == '1')
{
window.location.replace("<?php echo base_url(); ?>User_controller/profile");
} else {
alert('invalid username');
}
}
});
return false;
}
});
</script>
以外的任何值零是不明智的。
答案 1 :(得分:1)
我能够使用PReLu为我的网络训练,尽管使用ReLu的准确度稍低。是的,我只是简单地将ReLu换成了PReLu。
然而,我几乎一直注意到PReLU收敛速度比ReLu快得多。那么,也许你需要降低你的学习率?
答案 2 :(得分:1)
两个基本观察结果:
您已经完成了正确的第一步,改变了学习率。接下来,我会尝试调整命令行参数:更改收敛epsilon,动量,权重衰减或其他内部调整参数。有时,需要进行一次调整以利用即使是轻微的拓扑更改。
更改输入批量大小。您是否可以通过其他方式更改拓扑,例如更改卷积层?您可能会看到使用不同的CONV2过滤器方法得到的结果。