本文整理了pycaffe中常用的caffe Python API
- 导入caffe
- 1 caffe.NetSpec() 定义一个网络
- 2 Layers定义
导入caffe
|
|
1 caffe.NetSpec() 定义一个网络
|
|
上述代码是获取Caffe的一个Net,我们只需不断的填充这个n,最后把n输出到文件*.prototxt。
|
|
将定义好的网络输出到*.prototxt文件中。
2 Layers定义
2.1 Data Layers 数据层定义
2.1.1 L.Data()
lmdb/leveldb Data层定义
|
|
其效果如下
|
|
2.1.2 L.HDF5Data()
HDF5 Data层定义
|
|
其效果如下:
|
|
2.1.3 L.ImageData()
Image Data层定义
|
|
其效果如下:
|
|
2.2 Vision Layers 视觉层定义
视觉层包括Convolution, Pooling, Local Response Normalization (LRN)、Fully Connection等层。
2.2.1 L.Convolution()
|
|
其效果如下:
|
|
2.2.2 L.Pooling()
池化层pool定义
|
|
其效果如下:
|
|
2.2.3 L.LRN()
Local Response Normalization (LRN)层,此层是对一个输入的局部区域进行归一化,达到“侧抑制”的效果。可去搜索AlexNet或GoogLenet,里面就用到了这个功能.
|
|
其效果如下:
|
|
2.2.4 L.InnerProduct()
全连接层,把输入当作成一个向量,输出也是一个简单向量(把输入数据blobs的width和height全变为1)。
|
|
其效果如下:
|
|
2.3 Activation Layers 激活层定义
2.3.1 L.ReLU()
ReLU是目前使用最多的激活函数,主要因为其收敛更快,并且能保持同样效果。
标准的ReLU函数为max(x, 0),当x>0时,输出x; 当x<=0时,输出0。
|
|
其效果如下:
|
|
2.3.2 L.Sigmoid()
对每个输入数据,利用sigmoid函数执行操作。这种层设置比较简单,没有额外的参数。
|
|
其效果如下:
|
|
2.3.3 L.TanH()
利用双曲正切函数对数据进行变换。
|
|
其效果如下:
|
|
2.3.4 L.AbsVal()
求每个输入数据的绝对值。
|
|
其效果如下:
|
|
2.3.5 L.Power()
对每个输入数据进行幂运算。
f(x)= (shift + scale * x) ^ power
|
|
其效果如下:
|
|
2.3.6 L.BNLL()
binomial normal log likelihood的简称,二项式正态对数似然。
f(x)=log(1 + exp(x))
|
|
2.4 Other Layers 其他常用层定义
本节讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置。
2.4.1 L.SoftmaxWithLoss()
softmax-loss层和softmax层计算大致是相同的。softmax是一个分类器,计算的是类别的概率(Likelihood),是Logistic Regression 的一种推广。Logistic Regression 只能用于二分类,而softmax可以用于多分类。
softmax与softmax-loss的区别:
softmax计算公式:
$$p_j = \frac {e{_{j} ^{o} }}{\sum _k e{^{o_k} }} $$
softmax-loss计算公式:
$$L = - \sum _{j} y_i \log p_j$$
用户可能最终目的就是得到各个类别的概率似然值,这个时候就只需要一个 Softmax层,而不一定要进softmax-Loss 操作;或者是用户有通过其他什么方式已经得到了某种概率似然值,然后要做最大似然估计,此时则只需要后面的softmax-Loss 而不需要前面的 Softmax 操作。因此提供两个不同的 Layer 结构比只提供一个合在一起的Softmax-Loss Layer 要灵活许多。
不管是softmax layer还是softmax-loss layer,都是没有参数的,只是层类型不同而已。
|
|
其效果如下:
|
|
2.4.2 L.Softmax()
|
|
其效果如下:
|
|
2.4.3 L.Accuracy()
输出分类(预测)精确度,只有test阶段才有,因此需要加入include参数。
|
|
其效果如下:
|
|
2.4.4 L.Dropout()
Dropout是一个防止过拟合的trick。可以随机让网络某些隐含层节点的权重不工作。
|
|
其效果如下:
|
|
参考文献: