总结1. 损失函数层 Loss Layers 类型:
SoftmaxWithLoss //Softmax+损失函数(Softmax With Loss) caffe中多类分类问题
ContrastiveLoss //对比损失函数(Contrastive loss)
EuclideanLoss //欧式距离损失函数(Euclidean Loss) 是线性回归常用的损失函数。
InfogainLoss //信息增益损失函数(InformationGain Loss) 在文本处理中用到的损失函数。
Accuracy //用来计算输出和目标的正确率+ 计算top_k,事实上这不是一个loss,而且没有backward这一步。
SigmoidCrossEntropyLoss //Sigmoid交叉熵损失函数(Sigmoid Cross Entropy Loss) 也就是logistic regression使用的损失函数。
HingeLoss //铰链损失函数(Hinge Loss) 主要用在SVM分类器中.
---如果类别之间是互斥的,适合用softmax;如果类别之间允许重叠,应该选择k个logistic分类器。
总结2. 激活层 Activation / Neuron Layers 类型(输入输出大小相同,所以忽略大小的设定)
ReLU //Rectified-Linear and Leaky-ReLU。max(0,x)(bottom:上层conv/fc,top:上层conv/fc)
Sigmoid //使用 sigmoid(x)函数计算每个输入数据的输出,一般自己取名encode1neuron。(bottom:上层conv/fc,top:自己)
TanH //The TanH 层使用 tanh(x)函数计算每个输入数据x的输出。(bottom:in,top:out)
AbsVal //The AbsVal 层使用 abs(x)函数计算每个输入数据 x 的输出。(bottom:in,top:out)
Power //The Power 层使用函数(shift + scale * x) ^ power 计算每个输入数据 x 的输出。(bottom:in,top:out)
BNLL //The BNLL 层使用函数 log(1 + exp(x))计算每个输入数据 x 的输出。(bottom:in,top:out)
总结3. 数据层 可以高效的从内存读取数据,若对读写效率要求不高也可以从硬盘上的 HDFT 文件或者普通的图片文件读取。
MemoryData //必填(batch_size, channels, height, width: 指定直接从内存中读取的输入数据块的尺寸),需用c++/python指定数据源
//可选(rand_skip,shuffle [default false]洗牌,new_height, new_width: 根据设置的值,输入的图片将会被调整成给定的尺寸)
WindowData //
DummyData //主要用来开发和调试, 详细介绍见 DummyDataParameter。(caffe.proto)
Pooling //top:自己,bottom: "上层conv"
LRN //top:自己,bottom: "上层是什么接什么(一般接在pool后)"
im2col //Im2col 是一个辅助操作, 用来实现图像到“列向量”的转换(早期)
Split //Split层 是一个可以将输入的 blob 分裂(复制)成多个输出 blob 的功能层, 通常当一个 blob 需要给多个层作输入数据时该层会被使用。
Flatten //Flatten 层用来将尺寸为 n * c * h * w 的输入 blob 转换成一个尺寸为 n * (c*h*w)的输出 blob。
Reshape //Reshape 层在不改变数据的情况下改变输入 blob 的维度,和 Flatten 操作一样,处理过程只在输入 blob 上进行,没有进行数据的拷贝。
Concat //连结 Concat 层用来将多个输入 blob 连结成一个 blob 输出
Slice //切片 Slice 层按照给定维度(num 或者 channel)和切分位置的索引将一个输入 blob 分成多个blob 输出。
Eltwise //逐个元素操作 Elementwise Operations
ArgMax //ArgMax
Softmax //Softmax
MVN //Mean-Variance Normalization
BatchNorm //在cnn 后增加,位于神经元非线性变换前,基本上大多数网络结构都能很自然地融合进去。
-------具体参数可查caffe.proto
SoftmaxWithLoss //Softmax+损失函数(Softmax With Loss) caffe中多类分类问题
ContrastiveLoss //对比损失函数(Contrastive loss)
EuclideanLoss //欧式距离损失函数(Euclidean Loss) 是线性回归常用的损失函数。
InfogainLoss //信息增益损失函数(InformationGain Loss) 在文本处理中用到的损失函数。
Accuracy //用来计算输出和目标的正确率+ 计算top_k,事实上这不是一个loss,而且没有backward这一步。
SigmoidCrossEntropyLoss //Sigmoid交叉熵损失函数(Sigmoid Cross Entropy Loss) 也就是logistic regression使用的损失函数。
HingeLoss //铰链损失函数(Hinge Loss) 主要用在SVM分类器中.
---如果类别之间是互斥的,适合用softmax;如果类别之间允许重叠,应该选择k个logistic分类器。
总结2. 激活层 Activation / Neuron Layers 类型(输入输出大小相同,所以忽略大小的设定)
ReLU //Rectified-Linear and Leaky-ReLU。max(0,x)(bottom:上层conv/fc,top:上层conv/fc)
Sigmoid //使用 sigmoid(x)函数计算每个输入数据的输出,一般自己取名encode1neuron。(bottom:上层conv/fc,top:自己)
TanH //The TanH 层使用 tanh(x)函数计算每个输入数据x的输出。(bottom:in,top:out)
AbsVal //The AbsVal 层使用 abs(x)函数计算每个输入数据 x 的输出。(bottom:in,top:out)
Power //The Power 层使用函数(shift + scale * x) ^ power 计算每个输入数据 x 的输出。(bottom:in,top:out)
BNLL //The BNLL 层使用函数 log(1 + exp(x))计算每个输入数据 x 的输出。(bottom:in,top:out)
总结3. 数据层 可以高效的从内存读取数据,若对读写效率要求不高也可以从硬盘上的 HDFT 文件或者普通的图片文件读取。
常见的数据预处理操作(减均值,尺度变换,随机裁剪或者镜像)可以能过设定参数TransformationParameter 来实现。(具体参数可查caffe.proto或文档)
Data //必填(source,batch_size),可选(rand_skip backend[default LEVELDB]) 高效率的数据库MemoryData //必填(batch_size, channels, height, width: 指定直接从内存中读取的输入数据块的尺寸),需用c++/python指定数据源
HDF5Output //必填(file_name: 写入文件的路径)HDF5 output 层执行了一个与数据读取相反的操作, 它将数据写进硬盘。
ImageData //必填(source: text 文件的路径名,该 text 文件的每一行存储一张图片的路径名和对应的标签;batch_size: 打包成 batch 的图片数量)//可选(rand_skip,shuffle [default false]洗牌,new_height, new_width: 根据设置的值,输入的图片将会被调整成给定的尺寸)
WindowData //
DummyData //主要用来开发和调试, 详细介绍见 DummyDataParameter。(caffe.proto)
总结4. 视觉层 视觉层的输入与输出均为图像。一个典型的图像通常为单通道的灰度图或三通道的 RBG彩色图。而通道数不限,类似结构的数据均可理解为图像。
Convolution //top:自己,bottom:"上层data/上层pool/上层norm/上层conv"(就是不能接激活层(如ReLU),直接忽略,接conv)Pooling //top:自己,bottom: "上层conv"
LRN //top:自己,bottom: "上层是什么接什么(一般接在pool后)"
im2col //Im2col 是一个辅助操作, 用来实现图像到“列向量”的转换(早期)
总结5. 普通层
InnerProduct //内积/全连接层,num_output (c_o): 层的输出节点数或者理解为滤波器的个数Split //Split层 是一个可以将输入的 blob 分裂(复制)成多个输出 blob 的功能层, 通常当一个 blob 需要给多个层作输入数据时该层会被使用。
Flatten //Flatten 层用来将尺寸为 n * c * h * w 的输入 blob 转换成一个尺寸为 n * (c*h*w)的输出 blob。
Reshape //Reshape 层在不改变数据的情况下改变输入 blob 的维度,和 Flatten 操作一样,处理过程只在输入 blob 上进行,没有进行数据的拷贝。
Concat //连结 Concat 层用来将多个输入 blob 连结成一个 blob 输出
Slice //切片 Slice 层按照给定维度(num 或者 channel)和切分位置的索引将一个输入 blob 分成多个blob 输出。
Eltwise //逐个元素操作 Elementwise Operations
ArgMax //ArgMax
Softmax //Softmax
MVN //Mean-Variance Normalization
BatchNorm //在cnn 后增加,位于神经元非线性变换前,基本上大多数网络结构都能很自然地融合进去。
//它不是网络本身本质上的内容修改,而是为了将conv层的输出做normalization以使得下一层的更新能够更快,更准确。
-------具体的定义和使用方法参考caffe官方文档-------具体参数可查caffe.proto