caffe protobuf详解

1.数据层

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.卷积层

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "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 #卷积核的大小
  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;

3.池化层

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.激活函数

#在激活层中,对输入数据进行激活操作,是逐元素进行运算的,在运算过程中,没有改变数据的大小,即输入和输出的数据大小是相等的。

#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.全连接层

#全连接层,输出的是一个简单向量 参数跟卷积层一样
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"
  top: "accuracy"
  include {
  phase: TEST
  }
}

时间: 2024-11-10 04:49:59

caffe protobuf详解的相关文章

Protobuf详解

按: 新公司前端后端,使用的数据化方式是protobuf (Protocol Buffer). 一,什么是Protobuf 官方文档给出的是: a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more. 二,Protobuf的优点 1,性能好,效率高 2,代码生成机制,

Windows下caffe安装详解(仅CPU)

本文大多转载自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己实战心得. 1.环境:windows 7\VS2013 2.caffe-windows准备 (1)下载官方caffe-windows并解压,将 .\windows\CommonSettings.props.example备份,并改名为CommonSettings.props.如图4所示: 图 4:修改后的CommonSettings.props文件 附带说明

SSD(single shot multibox detector)算法及Caffe代码详解[转]

这篇博客主要介绍SSD算法,该算法是最近一年比较优秀的object detection算法,主要特点在于采用了特征融合. 论文:SSD single shot multibox detector论文链接:https://arxiv.org/abs/1512.02325 算法概述: 本文提出的SSD算法是一种直接预测bounding box的坐标和类别的object detection算法,没有生成proposal的过程.针对不同大小的物体检测,传统的做法是将图像转换成不同的大小,然后分别处理,最

caffe 配置文件详解

主要是遇坑了,要记录一下. solver算是caffe的核心的核心,它协调着整个模型的运作.caffe程序运行必带的一个参数就是solver配置文件.运行代码一般为 # caffe train --solver=*_slover.prototxt 在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解.solver的主要作用就是交替调用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代

Protocol Buffers编码详解,例子,图解

本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路.如果你详细了解此文,你应该就能具备自己造一套编解码轮子的能力(至少基本思路). 测试的例子 阅读图片时请对比前面的例子和表格.每个字段的名称都是包含了tag的. message S2 { optional int32 s2_1 = 1; optional string s2_2 =

Protobuf 文件生成工具 Prototool 命令详解

Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言包的生成. 详情参考Github: https://github.com/uber/prototool docker 方式使用 prototool 工具 使用方式 // prototool 的使用 docker run --rm -v $(pwd):/work "uber/prototool&quo

Protocol Buffer技术详解(Java实例)

Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++.Java和Python,其中Python主要用于编写各种工具程序.然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍.          一.生成目标语言代码.      下面

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,

Retrofit2.0使用详解

Retrofit2.0使用 随笔 生活是一面镜子,不去擦拭,岁月的灰尘将掩埋它. 转载请标明出处:http://blog.csdn.net/qq_15807167/article/details/51712048 主页 Retrofit20使用 初次了解Retrofit 具体的使用文档 请求体Request Body FORM ENCODED AND MULTIPART 表单和Multipart 异步 VS 同步 Retrofit20的新知识点 Retrofit20的使用方式 使用 注意 如果有