前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Caffe篇】--Caffe从入门到初始及各层介绍

【Caffe篇】--Caffe从入门到初始及各层介绍

作者头像
LhWorld哥陪你聊算法
发布于 2018-09-13 07:13:13
发布于 2018-09-13 07:13:13
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

一、前述

Caffe,全称Convolutional Architecture for Fast Feature Embedding。是一种常用的深度学习框架,主要应用在视频、图像处理方面的应用上。caffe是一个清晰,可读性高,快速的深度学习框架。作者是贾扬清,加州大学伯克利的ph.D,现就职于Facebook。caffe的官网是http://caffe.berkeleyvision.org/。

 二、具体

1、输入层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
layer {
  name: "cifar"
  type: "Data"
  top: "data"  #一般用bottom表示输入,top表示输出,多个top代表有多个输出
  top: "label"
  include {
    phase: TRAIN #训练网络分为训练阶段和自测试阶段,如果没写include则表示该层即在测试中,又在训练中
  }
  transform_param {
    mean_file: "examples/cifar10/mean.binaryproto" #用一个配置文件来进行均值的操作
    transform_param {
    scale: 0.00390625
    mirror: 1  # 1表示开启镜像,0表示关闭,也可用ture和false来表示
    # 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪
    crop_size: 227
  }
  }
  data_param {
    source: "examples/cifar10/cifar10_train_lmdb" #数据库来源
    batch_size: 64 #每次批处理的个数
    backend: LMDB #选用数据的名称
  }
}

### 使用LMDB源
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb"
    batch_size: 64
    backend: LMDB
  }
}

###使用HDF5数据源
layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label"
  hdf5_data_param {
    source: "examples/hdf5_classification/data/train.txt"
    batch_size: 10
  }
}

###数据直接来源与图片
#/path/to/images/img3423.jpg 2  
#/path/to/images/img3424.jpg 13  
#/path/to/images/img3425.jpg 8

layer {
  name: "data"
  type: "ImageData" #类型
  top: "data"
  top: "label"
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  image_data_param {
    source: "examples/_temp/file_list.txt"
    batch_size: 50
    new_height: 256 #如果设置就对图片进行resize操作
    new_width: 256
  }
}

2、卷积层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
layer {
  name: "conv1" #定义一个名字 必须指定的
  type: "Convolution"
  bottom: "data"#前面连接的层 data层
  top: "conv1"#输出是卷积层
  param {
    lr_mult: 1  #lr_mult: #当前层的学习率 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr。如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20 #卷积核(filter)的个数等于特征图的个数
    kernel_size: 5 #卷积核的大小 5*5*d  中的d是上一层的深度 
    stride: 1 #卷积核的步长,默认为1 
    pad: 0 #扩充边缘,默认为0,不扩充
    weight_filler {
      type: "xavier" #权值初始化。 默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"
    }
    bias_filler {
      type: "constant" #偏置项的初始化。一般设置为"constant",值全为0
    }
  }
}

输入:n*c0*w0*h0
输出:n*c1*w1*h1
其中,c1就是参数中的num_output,生成的特征图个数
 w1=(w0+2*pad-kernel_size)/stride+1;
 h1=(h0+2*pad-kernel_size)/stride+1;

结论:

假设输入时h*w k是kernel_size p 是padding s是stride则
特征图 的输出的h是多大的 (h-k+2p)/s+1
             w是(w-k+2p)/s+1

3、池化层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX #池化方法,默认为MAX。目前可用的方法有MAX, AVE
    kernel_size: 3 #池化的核大小
    stride: 2 #池化的步长,默认为1。一般我们设置为2,即不重叠。
  }
}

#pooling层的运算方法基本是和卷积层是一样的。

4、激活函数层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#在激活层中,对输入数据进行激活操作,是逐元素进行运算的,在运算过程中,没有改变数据的大小,即输入和输出的数据大小是相等的。

###Sigmoid


layer {
  name: "test"
  bottom: "conv"
  top: "test"
  type: "Sigmoid"
}

#ReLU是目前使用最多的激活函数,主要因为其收敛更快,并且能保持同样效果。标准的ReLU函数为max(x, 0),当x>0时,输出x; 当x<=0时,输出0
f(x)=max(x,0)



layer {
  name: "relu1"
  type: "ReLU"
  bottom: "pool1"
  top: "pool1"
}

 5、全连接层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#全连接层,输出的是一个简单向量  参数跟卷积层一样
layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
#测试的时候输入准确率
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "ip2"#两个输入一个输入是分类结果
  bottom: "label"#另一个输入是label
  top: "accuracy"
  include {
    phase: TEST
  }
}

 6、softmax_layer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#softmax-loss layer:输出loss值 对于softmax 得到损失函数 -logp p为正确的分类的概率
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "ip1"
  bottom: "label"
  top: "loss"
}

#softmax layer: 输出似然值  得到每一个类别的概率值
layers {
  bottom: "cls3_fc"
  top: "prob"
  name: "prob"
  type: “Softmax"
}

7、reshape层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#在不改变数据的情况下,改变输入的维度

layer {
    name: "reshape"
    type: "Reshape"
    bottom: "input"
    top: "output"
    reshape_param {
      shape {
        dim: 0  # copy the dimension from below
        dim: 2
        dim: 3
        dim: -1 # infer it from the other dimensions
      }
    }
  }

有一个可选的参数组shape, 用于指定blob数据的各维的值(blob是一个四维的数据:n*c*w*h)。

dim:0  表示维度不变,即输入和输出是相同的维度。

dim:2 或 dim:3 将原来的维度变成23

dim:-1 表示由系统自动计算维度。数据的总量不变,系统会根据blob数据的其它三维来自动计算当前维的维度值 。

假设原数据为:32*3*28*28, 表示323通道的28*28的彩色图片
    shape {
    dim: 0 #表示不变
    dim: 0
    dim: 14
    dim: -1 #表示自动推断
    }
输出数据为:32*3*14*56

#Dropout是一个防止过拟合的层
#只需要设置一个dropout_ratio就可以了。
layer {
  name: "drop7"
  type: "Dropout"
  bottom: "fc7-conv"
  top: "fc7-conv"
  dropout_param {
    dropout_ratio: 0.5
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Caffe学习笔记(三):cifar10_quick_train_test.prototxt配置文件分析
Jack_Cui
2018/01/08
1.1K0
Caffe学习笔记(三):cifar10_quick_train_test.prototxt配置文件分析
Caffe 关于 LetNet-5 之 lenet_train_test.prototxt 解析
前面我们深入分析了 lenet.prototxt 这个网络参数描述文件,但是这是对广义 LetNet-5 网络进行描述的。
用户1148525
2019/05/26
4260
Caffe中的Siamese网络
Siamese原意是”泰国的,泰国人”,而与之相关的一个比较常见的词是”Siamese twin”, 意思是是”连体双胞胎”,所以Siamemse Network是从这个意思转变而来,指的是结构非常相似的两路网络,分别训练,但共享各个层的参数,在最后有一个连接的部分。Siamese网络对于相似性比较的场景比较有效。此外Siamese因为共享参数,所以能减少训练过程中的参数个数。这里的slides讲解了Siamese网络在深度学习中的应用。这里我参照Caffe中的Siamese文档, 以LeNet为例,简单地总结下Caffe中Siamese网络的prototxt文件的写法。
王云峰
2019/12/25
7700
Caffe中的Siamese网络
caffe随记(二) --- 数据结构简介
TeeyoHuang
2017/12/28
8490
caffe随记(二) --- 数据结构简介
caffe示例实现之4在MNIST手写数字数据集上训练与测试LeNet
http://blog.csdn.net/liumaolincycle/article/details/47336921
bear_fish
2018/09/19
5990
caffe示例实现之4在MNIST手写数字数据集上训练与测试LeNet
Caffe MNIST 简要分析
MNIST database,一个手写数字的图片数据库,每一张图片都是0到9中的单个数字。每一张都是抗锯齿(Anti-aliasing)的灰度图,图片大小2828像素,数字部分被归一化为2020大小,位于图片的中间位置,保持了原来形状的比例.
Yano_nankai
2018/10/08
5440
Caffe MNIST 简要分析
Caffe实践 - 基于VGG16 多标签分类的训练与部署
假定每张图片具有 N 个标签(本文N=3),分别为 label1,label2,label3,...,labelNlabel1,label2,label3,...,labelN{label1, label2, label3,...,labelN}.
AIHGF
2019/02/18
1.4K0
Caffe实践 - 基于VGG16 多标签分类的训练与部署
layer定义 | 深度学习caffe框架
首先让我们回顾一下caffe的代码层次: blob,layer, net和solver.
用户1332428
2018/08/17
6830
layer定义 | 深度学习caffe框架
Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
Jack_Cui
2018/01/08
1.1K0
Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
【caffe速成】caffe图像分类从模型自定义到测试
这一次我们讲讲 Caffe 这个主流的开源框架从训练到测试出结果的全流程。到此,我必须假设大家已经有了深度学习的基础知识并了解卷积网络的工作原理。
用户1508658
2019/07/25
5270
【caffe速成】caffe图像分类从模型自定义到测试
Caffe 中关于 LetNet-5 网络的定义文件 lenet.prototxt 解析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjunhit/article/details/53583127
用户1148525
2019/05/28
9280
LeNet神经网络
LeNet神经网络由深度学习三巨头之一的Yan LeCun提出,他同时也是卷积神经网络 (CNN,Convolutional Neural Networks)之父。LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入了使用。LeNet的实现确立了CNN的结构,现在神经网络中的许多内容在LeNet的网络结构中都能看到,例如卷积层,Pooling层,ReLU层。虽然LeNet早在20世纪90年代就已经提出了,但由于当时缺乏大规模的训练数据,计算机硬件的性能也较低,因此LeNet神经网络在处理复杂问题时效果并不理想。虽然LeNet网络结构比较简单,但是刚好适合神经网络的入门学习。
Tyan
2019/05/25
1.2K0
Caffe源码调试
本文介绍了如何使用Caffe和Python在MNIST数据集上训练一个简单的CNN分类器。首先,介绍了MNIST数据集的特点,然后介绍了使用Caffe搭建模型的过程。接着,详细描述了如何利用Python和Caffe进行训练,并通过实验比较了两种训练方法。最后,总结了本文的主要贡献和未来的研究方向。
Tyan
2017/12/28
1.7K0
Caffe源码调试
Caffe学习笔记(四):使用pycaffe生成train.prototxt、test.prototxt文件
本文介绍了如何使用Caffe进行深度学习,主要内容包括安装Caffe、配置Caffe环境、创建LMDB数据集、训练CNN模型和测试模型。
Jack_Cui
2018/01/08
2.6K0
Caffe学习笔记(四):使用pycaffe生成train.prototxt、test.prototxt文件
深度学习: Faster R-CNN 网络
网络结构有两种,一种是将ZFNet(扔掉了尾端的全连接层)拿来用,另一种则是将VGG拿来用(扔掉了尾端的全连接层)。论文中给出的是第一种(绿框内为拿来用的那部分):
JNingWei
2018/09/27
2.5K0
深度学习: Faster R-CNN 网络
深度学习: LeNet 网络
该网络在字符识别上取得了高于99%的准确率,因此主要被用于字符识别的卷积神经网络。
JNingWei
2018/09/27
6490
深度学习: LeNet 网络
faster-rcnn 之 RPN网络的结构解析
【说明】:欢迎加入:faster-rcnn 交流群 238138700,我想很多人在看faster-rcnn的时候,都会被RPN的网络结构和连接方式纠结,作者在文中说的不是很清晰,这里给出解析;
全栈程序员站长
2022/09/07
6970
faster-rcnn 之 RPN网络的结构解析
深度学习: AlexNet 网络
AlexNet网络 提出于2012年,Hinton大神带领团队在ImageNet图像分类竞赛上夺魁,成为了深度学习的转入兴盛的拐点,因此2012年被称为“计算机视觉领域中的深度学习元年”。
JNingWei
2018/09/27
7670
深度学习: AlexNet 网络
caffe详解之mnist手写体识别
caffe(https://github.com/BVLC/caffe/tree/master/examples/mnist)
AI异构
2020/07/29
1.6K0
caffe详解之mnist手写体识别
深度学习: RPN (区域候选网络)
Note: two stage型的检测算法在RPN 之后 还会进行 再一次 的 分类任务 和 边框回归任务,以进一步提升检测精度。
JNingWei
2018/09/27
6.7K0
深度学习: RPN (区域候选网络)
相关推荐
Caffe学习笔记(三):cifar10_quick_train_test.prototxt配置文件分析
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文