前言:

通过检索论文、书籍、博客,继续学习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代码结构梳理,及相关知识点归纳的更多相关文章

  1. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  2. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  3. Caffe学习系列——工具篇:神经网络模型结构可视化

    Caffe学习系列——工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py ...

  4. Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  5. Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

  6. 转 Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

  7. Caffe学习系列(12):训练和测试自己的图片--linux平台

    Caffe学习系列(12):训练和测试自己的图片   学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测 ...

  8. Caffe学习系列(22):caffe图形化操作工具digits运行实例

    上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的” Images" ...

  9. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

    经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...

随机推荐

  1. 分布式环境中三种Session管理方法的使用场景及优缺点

    在分布式环境,管理Session通常使用下面三种方式: 一.Session Replication 方式管理 (即session复制)         简介:将一台机器上的Session数据广播复制到 ...

  2. Bootstrap入门(十四)组件8:媒体对象

    Bootstrap入门(十四)组件8:媒体对象 这是一个抽象的样式,用以构建不同类型的组件,这些组件都具有在文本内容的左或右侧对齐的图片(就像博客评论或 Twitter 消息等). 1.基本样式 2. ...

  3. KVO,看我就够了!

    概述 KVO全称Key-Value-Observing,也叫键值监听,是一种观察者设计模式.提供了一种机制,当指定的对象的属性被修改后,对象就会收到一个通知.也就是说每次指定的被观察的对象的属性被修改 ...

  4. (二)Hololens Unity 开发入门 之 Hello HoloLens~

    学习源于官方文档 微软官文~ 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要 ...

  5. Unity3d获取游戏对象的几种方法

    1.GameObject.Find() 通过场景里面的名子或者一个路径直接获取游戏对象. GameObject root = GameObject.Find("GameObject" ...

  6. Android Studio 提高工作效率的奇技

    1.ctrl+f12 ctrl+f12此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法.勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrl ...

  7. 融云发送手机短信验证短信(.net版本)

    首先本次需求是在MVC5中进行的,通过收费的融云服务来验证手机号码,而且本次的项目也是前后台分离,所以添加了WEBAPI2,那么先添加WEBAPI的接口 using System; using Sys ...

  8. Android名片扫描识别系统SDK

    Android名片扫描识别系统SDK 一.Android名片扫描识别系统应用背景 这些年,随着移动互联的发展,APP应用成爆发式的增长,在很多APP中都涉及到对名片信息的录入,如移动CRM.移动端OA ...

  9. Unity中的万能对象池

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的万能对象池 本节通过一个简单的射击子弹的示例来介 ...

  10. BZOJ 1198: [HNOI2006]军机调度(搜索)

    直接暴搜就行了= = CODE: #include<cstdio> #include<iostream> #include<cstring> #include< ...