Day7 Caffe代码梳理

《21天实战Caffe》学习笔记第7天

练习题1:Caffe源码中一些宏的原始定义

NOT_IMPLEMENTED

1
#define NOT_IMPLEMENTED LOG(FATAL) << "Not Implemented Yet"

INSTANTIATE_CLASS

1
2
3
4
#define INSTANTIATE_CLASS(classname) \
char gInstantiationGuard##classname; \
template class classname<float>; \
template class classname<double>

练习题3:推导BNLL layer的误差反向传播公式

BNLL layer的激活函数为

$$\varphi\left(x\right)=x+\ln\left(1+e^{-x}\right),x>0$$

$$\varphi\left(x\right)=\ln\left(1+e^x\right),x\leqslant0$$

对激活函数求导

事实上,激活函数可以写成统一的形式

$$\varphi\left(x\right)=\ln\left(1+e^x\right)$$

求导

$$\varphi’\left(x\right)=\displaystyle\frac{e^x}{1+e^x}$$

计算反向误差公式

反向误差=后一层的反向误差*激活函数导数,即

$$\delta^{\left(l\right)}=\displaystyle\delta^{\left(l+1\right)}\frac{e^x}{1+e^x}$$