caffe这个c++工程的目录结构
目录结构
caffe文件夹下主要文件:
data用于存放下载的训练数据docs帮助文档example一些代码样例matlabMATLAB接口文件pythonPython接口文件model一些配置好的模型参数scripts一些文档和数据用到的脚本
下面是核心代码文件夹:
tools保存的源码是用于生成二进制处理程序的,caffe在训练时实际是直接调用这些二进制文件。includeCaffe的实现代码的头文件src实现Caffe的源文件
后面的学习主要围绕后面两个文件目录(include和src)下的代码展开
源码结构
srcgtestgoogle test一个用于测试的库你make runtest时看见的很多绿色RUN OK就是它,这个与caffe的学习无关,不过是个有用的库caffe关键的代码都在这里了test用gtest测试caffe的代码util数据转换时用的一些代码。caffe速度快,很大程度得益于内存设计上的优化(blob数据结构采用proto)和对卷积的优化(部分与im2col相关)[1]。proto即所谓的“Protobuf”[2],全称“Google Protocol Buffer”,是一种数据存储格式,帮助caffe提速。layers深度神经网络中的基本结构就是一层层互不相同的网络了,这个文件夹下的源文件以及目前位置“src/caffe”中包含的我还没有提到的所有.cpp文件就是caffe的核心目录下的核心代码了。
源码主要关系
如上所言我们现在可以知道,caffe核心中的核心是下面的文档和文件:(这部分目前不清楚的地方先参照别人的观点)
- blob[.cpp .h] 基本的数据结构Blob类[3]。
- common[.cpp .h] 定义Caffe类
- internal_thread[.cpp .h] 使用boost::thread线程库
- net[.cpp .h] 网络结构类Net
- solver[.cpp .h] 优化方法类Solver
- data_transformer[.cpp .h] 输入数据的基本操作类DataTransformer
- syncedmem[.cpp .h] 分配内存和释放内存类CaffeMallocHost,用于同步GPU,CPU数据
- layer_factory.cpp layer.h 层类Layer
layers此文件夹下面的代码全部至少继承了类Layer
include文件夹里面存放的都是hpp文件。hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。src中的每个.cpp文件对应include文件中的头文件。
caffe这个c++工程的目录结构的更多相关文章
- Eclipse中一个Maven工程的目录结构
在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...
- Eclipse中一个Maven工程的目录结构 (MacOS)
1. 为什么写这篇文章 在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织 ...
- 第一个Maven工程的目录结构和文件内容及联网问题
[第一个Maven工程] ①目录结构 Hello |---src |---|---main |---|---|---java |---|---|---resources |---|---test |- ...
- iOS项目工程及目录结构
做过一些iOS的项目,不同项目的沉淀没有积累到一起,目录的管理都在后期随着人员的增加越来越混乱,因此在这里做一些梳理,希望达到两个目的. 一套相对通用的目录结构,作为后续项目的模版. 积累相应的基础库 ...
- Android工程的目录结构
1.最大限度的将不需要出现在Java代码中的文件和代码本身分离开来 2.使用XML标记语言定义UI和数据结构 3.对于工程中的文件存储在工程目录中的那个位置有着严格的规定,在编译过程中Android会 ...
- 2.2 web工程的目录结构
[转] 一个最简单的Web应用的目录结构如下所示: Web应用的结构定义在Servlet的规范中,目前最新版本为3.1. 下载地址:https://jcp.org/aboutJava/communit ...
- Android Studio教程01-的工程和目录结构解析
目录 1.主目录 1.1. app目录 1.2.项目资源文件夹res 2. 理解build.gradle文件 2.1. 外部build.gradle 2.2. app文件下的build.gradle ...
- Android入门(二):Android工程目录结构
首先我们来看看Android工程的目录结构,如下图: 下面我们来看看每个文件夹都是用来做什么的? 1.src:这个不用多说,它就是保存Java源文件的目录: 2.gen:该文件夹用来保存自动生成的R. ...
- Android 工程目录结构简介
一般来说,一个Android工程的目录结构如下图所示. 1:src JAVA源代码都放在这里面. 2:gen 编译器自动生成的一些JAVA代码 3:Android 4.2 Android平台(本工程用 ...
随机推荐
- UICollectionView与UITableView混用手势冲突
前言 最近在重构某个模块,以后别人封装的所谓的基类就像一坨死一样,看见就恶心,相信同行的你们能够明白那种心情.为什么要重构?并不是真的因为它像一坨死,而是因为这个模块是用户使用最频繁的,而且出现了不少 ...
- 前端之html第一天
一.内容
- SQL Server 日期转换成字符串
参考网址:http://wenku.baidu.com/view/970c6c1655270722192ef70e.html 下面是常用的几个 --返回06-27-13 ), ) --2013-06- ...
- cardboard sdk for unity 下载地址
https://github.com/googlesamples/cardboard-unity
- Linux 常用命令十二 top
一.top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以 ...
- bzoj 4195: [Noi2015]程序自动分析【并查集】
等于有传递性,所以hash一下把等于用并查集连起来,然后再判断不等于是否合法即可 #include<iostream> #include<cstdio> #include< ...
- bzoj 2132 圈地计划【最小割+dinic】
对于网格图,尤其是这种要求相邻各自不同的,考虑黑白染色 对于这张染色后图来说: 对于每个黑格: 表示初始时选择商业区: s点向它连商业区收益的流量,它向t点连工业区收益的流量: 割断S侧的边说明反悔, ...
- bzoj 4814: [Cqoi2017]小Q的草稿【计算几何】
//先打个50暴力,10min50分简直美滋滋~ #include<iostream> #include<cstdio> #include<algorithm> u ...
- bzoj 4784: [Zjoi2017]仙人掌【tarjan+树形dp】
其实挺简单的但是没想出来---- 首先判断无解情况,即,一开始的图就不是仙人掌,使用tarjan判断如果一个点dfs下去有超过一个点比他早,则说明存在非简单环. 然后考虑dp,显然原图中已经属于某个简 ...
- IE兼容之中文汉字请求乱码-network
IE兼容之中文汉字请求乱码 IE控制台报错: IE网络报错: 解决方法: encodeURI('--- @ -- 子卿 -'); // "---%20@%20--%20%E5%AD%90%E ...