caffe学习笔记---5 -caffe网络层类型

来源:互联网 发布:设计师用的软件 编辑:程序博客网 时间:2024/05/16 17:14

转载地址:http://blog.csdn.net/yiliang_/article/details/60465866

总结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 文件或者普通的图片文件读取。

   常见的数据预处理操作(减均值,尺度变换,随机裁剪或者镜像)可以能过设定参数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




0 0
原创粉丝点击