zoukankan      html  css  js  c++  java
  • caffe这个c++工程的目录结构

    目录结构

    caffe文件夹下主要文件:

    • data 用于存放下载的训练数据
    • docs 帮助文档
    • example 一些代码样例
    • matlab MATLAB接口文件
    • python Python接口文件
    • model 一些配置好的模型参数
    • scripts 一些文档和数据用到的脚本

    下面是核心代码文件夹:

    • tools 保存的源码是用于生成二进制处理程序的,caffe在训练时实际是直接调用这些二进制文件。
    • include Caffe的实现代码的头文件
    • src 实现Caffe的源文件

    后面的学习主要围绕后面两个文件目录(includesrc)下的代码展开

    源码结构

    • src
      • gtest google 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头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要includecpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的libdll,因此非常适合用来编写公用的开源库。src中的每个.cpp文件对应include文件中的头文件。


  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/7698783.html
Copyright © 2011-2022 走看看