Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳
前言:
通过检索论文、书籍、博客,继续学习Caffe,千里之行始于足下,继续努力。将自己学到的一些东西记录下来,方便日后的整理。
正文:
1、代码结构梳理
在终端下运行如下命令,可以查看caffe代码结构,我将其梳理了一下:
root@ygh:/home/ygh/caffe# tree -d
.
├── build -> .build_release //编译结果存放处,子目录结构与主目录类似
├── cmake //使用CMake编译时会用到
│ ├── External
│ ├── Modules
│ └── Templates
├── data //用于存放原始数据及数据获取的脚本sh文件
│ ├── cifar10
│ ├── ilsvrc12
│ └── mnist
├── distribute //编译后生成发布包的位置,用于迁移
│ ├── bin
│ └── lib
├── docker //同样为了便于迁移,使用了Docker工具
│ ├── cpu
│ └── gpu
├── docs //doxygen工程文件放在这里,可生成Caffe ref_man.pdf
│ ├── images
│ ├── _layouts
│ ├── stylesheets
│ └── tutorial
│ ├── fig
│ └── layers
├── examples //存放Caffe简单例程
│ ├── cifar10 //CIFAR10例程
│ ├── cpp_classification //图像分类例程
│ ├── feature_extraction //特征提取例程
│ ├── finetune_flickr_style //finetune例程
│ ├── finetune_pascal_detection //finetune例程
│ ├── hdf5_classification //使用HDF5数据源的分类例程
│ ├── imagenet //ImageNet例程,使用bvlc_reference_caffenet模型
│ ├── images
│ ├── mnist //MNIST手写数字识别例程
│ │ ├── mnist_test_lmdb
│ │ └── mnist_train_lmdb
│ ├── net_surgery
│ ├── pycaffe
│ │ └── layers
│ ├── siamese
│ └── web_demo //一个Web Server + 分类例程
│ └── templates
├── include //Caffe头文件集中存放此目录
│ └── caffe
│ ├── layers
│ ├── test
│ └── util
├── Install-OpenCV
│ ├── ArchLinux
│ ├── RedHat
│ └── Ubuntu
│ ├── 2.3
│ └── 2.4
├── matlab //适用于Matlab做Wrapper,具体可以参考RCNN源码
│ ├── +caffe
│ │ ├── imagenet
│ │ ├── private
│ │ └── +test
│ ├── demo
│ └── hdf5creation
├── models //存放示例模型
│ ├── bvlc_alexnet //经典的AlexNet
│ ├── bvlc_googlenet //GoogLeNet
│ ├── bvlc_reference_caffenet //Caffe模型的AlexNet
│ ├── bvlc_reference_rcnn_ilsvrc13 //RCNN模型 https:github.com/rbgirshick/rcnn
│ └── finetune_flickr_style
├── python //用于python Wrapper
│ └── caffe
│ ├── imagenet
│ ├── proto
│ └── test
├── scripts //存放脚本
│ └── travis
├── src //Caffe源码
│ ├── caffe
│ │ ├── layers //各个层的具体实现
│ │ ├── proto //proto描述文件,学习数据结构先从这里开始
│ │ ├── solvers
│ │ ├── test
│ │ │ └── test_data
│ │ └── util
│ └── gtest
└── tools //常用工具源码
└── extra
2、相关知识点
训练网络时,需要由数据读取层(DataLayer)不断地从LMDB读取数据,送入后续卷积、下采样等计算层。
数据读取层声明位于 include/caffe/data_layer.hpp中
数据变换器(DataTransformer)主要提供了对原始输入图像的预处理方法,包括随机切块、随机镜像、幅度缩放、去均值、灰度/色度变换等。声明头文件位于 include/Caffe/data_transformer.hpp中
求解器实现:
Caffe中的求解器有以下几种:
1、随机梯度下降法(Stochastic Gradient Descent,SGD),最常用
2、AdaDelta
3、自适应梯度法(Adaptive Gradient,ADAGRAD)
4、Adam
5、Nesterov加速梯度法(Nesterov's Accelerated Gradient,NAG)
6、RMSprop
solver.prototxt中格式
base_lr:0.01 //基准学习速率为0.01,另外每个Layer会在基准上进行细调
lr_policy:"step" //学习速率衰减策略,step为步进方式,即每进行step次迭代,学习速率更新一次
gamma:0.1 //学习速率衰减常数,每次更新学习速率都是乘上这个固定常数
stepsize:100000 //每10万次迭代,对学习速率进行一次更新
max_iter:350000 //训练总共需要35万次迭代
momentum:0.9 //遗忘因子为0.9
Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳的更多相关文章
- RabbitMQ学习系列二-C#代码发送消息
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...
- 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)
项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...
- Caffe学习系列——工具篇:神经网络模型结构可视化
Caffe学习系列——工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py ...
- Caffe学习系列(23):如何将别人训练好的model用到自己的数据上
caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...
- Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- 转 Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- Caffe学习系列(12):训练和测试自己的图片--linux平台
Caffe学习系列(12):训练和测试自己的图片 学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测 ...
- Caffe学习系列(22):caffe图形化操作工具digits运行实例
上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的” Images" ...
- Caffe学习系列(21):caffe图形化操作工具digits的安装与运行
经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...
随机推荐
- Flex移动应用程序开发的技巧和窍门(二)
范例文件 flex-mobile-dev-tips-tricks-pt2.zip 这是关于Flex移动应用程序开发的技巧和窍门的一系列文章中的第二部分.第一部分 内容主要集中讨论了视图之间以及应用程序 ...
- Spring IO Platform简介及示例
什么是Spring IO Platform Spring IO Platform,简单的可以认为是一个依赖维护平台,该平台将相关依赖汇聚到一起,针对每个依赖,都提供了一个版本号: 这些版本对应的依赖都 ...
- 第三章 Python 的容器: 列表、元组、字典与集合
列表是Python的6种内建序列(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象)之一, 列表内的值可以进行更改,操作灵活,在Python脚本中应用非常广泛 列表的语法格 ...
- node源码详解(二 )—— 运行机制 、整体流程
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource2 本博客同步在https://cnodejs.o ...
- Java中的==、equals、hasCode方法
== java 的数据类型分为“基本数据类型” 和“引用数据类型”在基本数据类型的比较中,== 比的就是基本数据类型变量中所保存的值在引用数据类型的比较中,== 才比较的是变量所指向的对象的地址. e ...
- ubuntu 下配置Web服务器
ubuntu 下配置Web服务器 1.切换管理员身份 终端/文本界面输入命令: su 根据提示输入密码 注: 如果不能使用su 点击查看如何启用su2.安装MySQL5 apt-get install ...
- ArcGIS API for JavaScript 4.2学习笔记[4] 第二章其余感兴趣的例子
先马克,估计要用到的有: 视图存档 2D地图添加指南针 视图移动 鹰眼 2D3D视图同步.同视图不同数据同步 以后实战的时候再仔细研究研究.
- [html5] 学习笔记-编辑 API 之 Range 对象(一)
1.Range对象的基本概念 一个Range对象代表页面上的一段连续区域,通过Range对象,可以获取或修改网页上的任何区域. <!DOCTYPE html> <html> & ...
- GIS制图课程目录(持续整理)
GIS制图课程目录 by 李远祥 由于过去一年都没有进行更新,近期终于抽出时间来进行相关知识的整理,因此,对专项技术进行了不同技术线条的梳理.为了方便阅读,特意整理一下全书的目录结构,希望对读者有帮助 ...
- CentOS 7 网卡命名修改为ethx格式
Linux 操作系统的网卡设备的传统命名方式是 eth0.eth1.eth2等,而 CentOS7 提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名全自动的.可预知的,缺 ...