本系列作者:木凌
时间:2016年12月。
文章连接:http://blog.csdn.net/u014540717
QQ交流群:554590241
反向传播是CNN中非常重要的一个环节,对于理论部分,这里不做介绍,如果对反向传播理论部分不熟悉,可以查看以下网站。
非常详细:零基础入门深度学习(3) - 神经网络和反向传播算法
非常详细:零基础入门深度学习(4) - 卷积神经网络
非常生动:如何直观的解释back propagation算法?
通过以上理论部分的学习,如果你还是感觉一脸蒙逼,那就看YOLO的代码吧,看完源代码你就会豁然开朗。让我们来一睹“back propagation”芳容
一、主函数backward_network(network net, network_state state)
//network.c
void backward_network(network net, network_state state)
{
int i;
float *original_input = state.input;
float *original_delta = state.delta;
state.workspace = net.workspace;
for(i = net.n-1; i >= 0; --i){
state.index = i;
if(i == 0){
state.input = original_input;
state.delta = original_delta;
}else{
layer prev = net.layers[i-1];
state.input = prev.output;
//这里注意,因为delta是指针变量,对state.delta做修改,就相当与对prev层的delta做了修改
state.delta = prev.delta;
}
layer l = net.layers[i];
l.backward(l, state);
}
}
//这函数没什么好说的,一层一层看吧,顺序如下:
//[detection]
//[connected]
//[dropout]
//[local]
//[convolutional]
//[maxpool]
1、反向传播-detection层
//detection_layer.c