您的位置:首页 > 理论基础 > 计算机网络

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

2017-04-27 21:12 197 查看
转载地址: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐