- 博客(346)
- 收藏
- 关注
原创 【caffe源码研究】第三章:源码篇(12) :激活函数层
以ReLULayer为例,比较简单,直接上代码#include <algorithm>#include <vector>#include "caffe/layers/relu_layer.hpp"namespace caffe {template <typename Dtype>void ReLULayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>
2017-01-06 01:26:50
423
原创 【caffe源码研究】第三章:源码篇(11) :PoolingLayer
Pooling层也是CNN中重要的层。 主要分成max-pool和mean-pool两种方法Forward_cpu前向过程如下void PoolingLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { const Dtype* bottom_
2017-01-06 01:21:38
730
原创 【caffe源码研究】第三章:源码篇(10) :ConvolutionLayer
简介CNN最经典的几个层,这里介绍一下卷积层。这张图总结的不太全面,但是基本表现出了卷积层的继承关系。BaseConvolutionLayer其继承自Layer,是一个卷积以及反卷积操作的基类,首先我们来看BaseConvolutionLayer的LayerSetUp函数void BaseConvolutionLayer<Dtype>::LayerSetUp(const vector<Blob<Dt
2017-01-06 01:08:50
2081
原创 【caffe源码研究】第三章:源码篇(9) :DataLayer
先从最基础的Data层讲起。 看看datalayer相关的类的继承关系首先定义了一个template <typename Dtype>class Batch { public: Blob<Dtype> data_, label_;};##include <boost/thread.hpp> #include <vector> #include "caffe/blob.hpp"
2017-01-06 00:30:57
1134
原创 【caffe源码研究】第三章:源码篇(8) :Layer代码
简介Layer是Caffe模型的本质内容和执行计算的基本单元。Layer可以进行很多运算,如:convolve(卷积)、pool(池化)、inner product(内积),rectified-linear和sigmoid等非线性运算,元素级的数据变换,normalize(归一化)、load data(数据加载)、softmax和hinge等losses(损失计算)。可在Caffe的layer
2017-01-05 19:34:04
889
原创 【caffe源码研究】第三章:源码篇(7) :Layer种类
Caffe自带的Layer及其参数被定义在caffe.proto中。一、分类在Layer的派生类中,主要可以分为(1)Vision LayersVison 层主要用于处理视觉图像相关的层,以图像作为输入,产生其他的图像。其主要特点是具有空间结构。 包含Convolution(conv_layer.hpp)、Pooling(pooling_layer.hpp)、Local Response Nor
2017-01-05 15:46:20
1209
原创 【caffe源码研究】第三章:源码篇(6) :caffe.proto
caffe使用protobuf来定义网络结构、参数等。这里介绍一下caffe.proto里面核心的部分。Blob先看Blob相关的protobufmessage BlobShape { //数据块形状定义为Num×Channel×Height×Wight原因在于caffe基于容器的多维嵌套 //来实现高维数据的封装。即vector(N)>。 repeated int64 di
2017-01-05 14:36:30
1010
原创 【caffe源码研究】第三章:源码篇(5) :Net
简介通过合成和自动微分,网络同时定义了一个函数和其对应的梯度。通过合成各层的输出来计算这个函数,来执行给定的任务,并通过合成各层的后向传播过程来计算来自损失函数的梯度,从而学习任务。Caffe模型是端到端的机器学习引擎。 准确的说,Net是由一系列层组成的有向无环(DAG)计算图,Caffe保留了计算图中所有的中间值以确保前向和反向迭代的准确性。一个典型的Net开始于data layer——从磁盘中
2017-01-04 22:02:21
1070
原创 【caffe源码研究】第三章:源码篇(4) :Solver
一个典型的solver文件如下# The train/test net protocol buffer definitionnet: "examples/mnist/lenet_train_test.prototxt"# test_iter specifies how many forward passes the test should carry out.# In the case of
2017-01-04 21:43:37
1133
原创 【caffe源码研究】第三章:源码篇(3) :工厂模式
caffe里面无论solver还是layer都使用了工厂模式。工厂模式工厂模式的介绍 工厂方法模式(Factory Method Pattern)工厂模式的UML的类图 :这里就用solver的工厂模式进行说明,具体代码在solver_factory.hpp中。SolverRegistrysolver_factory.hpp中定义了一个SolverRegistry类。template <typen
2017-01-04 16:08:48
2749
1
原创 【caffe源码研究】第三章:源码篇(2) :Blob 和 SyncedMemory
一、Blob在之前的介绍中提到Blob是:对处理数据的一层封装,用于在Caffe中通信传递。也为CPU和GPU间提供同步能力数学上,是一个N维的C风格的存储数组总的来说,Caffe使用Blob来交流数据,其是Caffe中标准的数组与统一的内存接口,它是多功能的,在不同的应用场景具有不同的含义,如可以是:batches of images(图像), model parameters(模型参数)
2017-01-04 12:13:14
996
原创 【caffe源码研究】第三章:源码篇(1) :caffe整体架构
在【caffe源码研究】caffe笔记 中对caffe源码结构做出过介绍。大致框架如下图所示:Caffe框架主要有五个组件,Blob,Solver,Net,Layer,Proto,其结构图如图所示。Solver负责深度网络的训练,每个Solver中包含一个训练网络对象和一个测试网络对象。每个网络则由若干个Layer构成。每个Layer的输入和输出Feature map表示为Input Blob和O
2017-01-04 10:46:28
1017
原创 【caffe源码研究】番外篇:(2) 使用Visual Studio 看cu代码
参考自 CUDA VS2010 语法高亮 cu .cuh 文件高亮 这个设置是让VS2010编辑.cu文件时,把.cu文件里的C/C++语法高亮。 设置方法: 在VS2010的菜单 依次点击:工具->选项->文本编辑器->文件扩展名 ,在这个界面里: “编辑器(I)”下拉框选microsoft visual ++,在“扩展名”文本框输入.cu 点击“添加”按钮 ,重复工作把.cuh 添加为vc+
2016-12-30 21:43:45
1286
原创 【caffe源码研究】番外篇:(1) 使用Visual Studio 调试caffe代码
对代码进行调试,还是在windows平台上使用Visual Studio进行调试跟踪比较方便,对学习源码比较有帮助。windows平台上的caffe安装方法见 【caffe源码研究】第一章:安装篇(中): Windows版本文环境Windows 64位Visual Studio 2013参考自 Caffe学习笔记(2) – 如何调试Caffe网络.先打开caffe的VS工程项目,假设你的caf
2016-12-30 17:06:09
1918
原创 CPU、GPU、CUDA,CuDNN 简介
一、CPU和GPU的区别CPU (Central Processing Unit) 即中央处理器GPU (Graphics Processing Unit) 即图形处理器GPGPU全称General Purpose GPU,即通用计算图形处理器。其中第一个“GP”通用目的(GeneralPurpose)而第二个“GP”则表示图形处理(GraphicProcess)CPU虽然有多核,但总数没有
2016-12-30 10:30:17
53620
原创 【caffe源码研究】第二章:实战篇(2) : ImageNet分类
本实战运行Classifying Imagenet的接口。1. 下载model新建一个download_model.bat,在caffe-master的工作目录下,内容./scripts/download_model_binary.py models/bvlc_reference_caffenet 下载bvlc_reference_caffenet.caffemodel2. 分类写Classifyi
2016-12-26 22:03:52
1630
原创 【caffe源码研究】第二章:实战篇(1) : 字符识别项目
字符识别实战项目,前面章节已经都有涉及,这里做一个总结,看看一个完整的项目从数据制作、训练 、识别、分析的全过程。一、数据集的制作这里就使用lmdb格式,其他格式参考 【caffe源码研究】第二章:使用篇(1): 制作数据集 中的方法即可。(1). 现有的数据集我们的数据如下,每个traindata和testdata里面都有10个文件夹,命名为0-9,分别对应数字0-9. 下方是目录结构部分显示。
2016-12-26 21:38:17
2622
原创 【caffe源码研究】第二章:使用篇(6) : 训练过程分析工具
将caffe生成的log进行解析,可以分析训练的过程。 如果你是Linux系统,那么默认生成的log在/tmp 下,名字一般类似于caffe.a216-All-Series.a216.log.INFO.20160426-054718.9658至于windows系统下,自己搜一下log.INFO.就出来了,如果清理过系统那可能就没有了。 我的是默认存在了Temp里面。如果不希望日志到处乱跑,可以写
2016-12-26 20:39:14
688
原创 【caffe源码研究】第二章:使用篇(5) : 模型可视化
使用python可以比较方便的将模型的过程可视化,看看中间的结果。我在一个预测年龄的python脚本后面进行。拿之前的数字识别来做实验也可以。 原脚本如下 : mean_filename='mean.binaryproto'proto_data = open(mean_filename, "rb").read()a = caffe.io.caffe_pb2.BlobProto.FromStri
2016-12-26 20:30:06
1032
原创 【caffe源码研究】第二章:使用篇(4) : python接口
本小节介绍一下python的使用接口。python接口的调用需要在编译正确python接口的环境下,详见安装篇。make pycaffe一、画网络结构图使用python接口的draw_net.py可以将提供的网络结构画出图像。 首先,需要安装graphviz,源码安装,yum源安装,jumbo安装等等都可以。 这里讲一下源码安装。graphviz源码安装暂留然后安装pydot,直接使用pip安装
2016-12-23 12:16:13
1294
原创 【caffe源码研究】第二章:使用篇(3) : C++接口
在caffe提供的样例里有一个C++接口的范例,整理一下如下。 首先是预测的 Classifier 类,定义构造函数Classifier和预测函数Classify。#include <caffe/caffe.hpp>#ifdef USE_OPENCV#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#
2016-12-22 19:48:20
1267
原创 【caffe源码研究】第二章:使用篇(2):tools
caffe编译好后在caffe/build/tools下会生成一些工具,一一介绍使用方法。一、caffe这是最重要的工具caffe: command line brewusage: caffe <command> <args>commands: train train or finetune a model test score a model
2016-12-21 17:58:29
2736
原创 【caffe源码研究】第二章:使用篇(1): 制作数据集
caffe支持的输入数据最常用的是Data类型,支持LEVELDB or LMDB。LevelDB的格式只需要将convert_imageset 后面接参数db_backend=leveldb即可。Images(支持ImageData格式)HDF5一、LMDB、LevelDB格式1. LMDBlmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。其主要特性有:基于
2016-12-21 16:30:50
2073
原创 【caffe源码研究】第一章:安装篇(中): Windows版
一、安装环境:Windows 64位 Visual Studio 2013下载微软编辑的caffe版本。git clone https://github.com/Microsoft/caffe.git照着README.txt安装就可以了。二、配置将 caffe\windows\CommonSettings.props.example复制一份叫做 caffe\windows\CommonSet
2016-12-20 16:51:08
943
原创 【caffe源码研究】caffe笔记
结构分析caffe分为 1. Solver 2. Net 3. Layer 4. Blob 四层结构. Solver : 负责模型的求解 Net : 负责定义网络的结构 Layer: 负责每一层网络功能的具体实现 Blob : 则定义数据,负责数据在每一层之间的流动。Blob1. 简介Blob是: 对处理数据的一层封装,用于在Caffe中通信传递。 也为CPU和GPU
2016-11-28 07:26:49
2161
原创 【caffe源码研究】第一章:安装篇(上): jumbo版
下载caffe下载caffe的源码# git clone https://github.com/BVLC/caffe.git 安装依赖库caffe涉及到一些依赖库,先使用jumbo安装# jumbo install pkg-config snappy opencv hdf5 google-gflags google-glog leveldb安装python依赖库#先安装pip# jumbo
2016-11-24 15:04:34
2396
原创 【机器学习】one hot encoding 独热编码
问题由来在很多机器学习任务中,特征并不总是连续值,而有可能是分类值。例如,考虑一下的三个特征:[“male”, “female”][“from Europe”, “from US”, “from Asia”][“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]如果将上述特征用数字表示,效率会高很多。例如:[“
2016-10-22 18:20:03
1787
1
原创 【Linux工具】tmux
一、简介Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话。不仅如此,你还可以通过 Tmux 使终端会话运行于后台或是按需接入、断开会话,这个功能非常实用。稍后,我们将会看到如何充分地利用这个功能。 Tmux是一款优秀的终端复用软件,可以类比screen,但是比screen要强大。 不使用tmux/screen的时候,当我们通过ssh登录到服务器以后,运行一个前台程序,如果网络出
2016-10-12 15:34:44
856
原创 【hadoop】hadoop学习笔记-回收站
Hadoop回收站trash,默认是关闭的。 习惯了window的同学,建议最好还是把它提前开开,否则误操作的时候,就欲哭无泪了 1. 修改conf/core-site.xml增加 <property> <name>fs.trash.interval</name> <value>1440</value> <description>Number of minutes bet
2016-09-29 13:58:26
326
原创 【hadoop】hadoop学习笔记-shell命令
参考自官方文档 http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.htmlFS Shell调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件
2016-09-29 13:45:43
355
原创 Markdown语法学习手册
一、 基础基础的很简单,下边的一看就懂。1. 标题# 标题一## 标题二### 标题三对应:标题一标题二标题三2.有序列表即使写错序列号,也会自动纠正。注意后面接空格。1. 鱼对水说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。 4. 快乐要有悲伤作陪,雨过应该就有天晴。 如果雨后还是雨,如果忧伤之后还是忧伤。请让我们从容面对这离别之后的离别。微笑地去寻找一个不可
2016-09-26 14:34:41
596
原创 【C++】google glog库
介绍google 出的一个C++轻量级日志库,支持以下功能:参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;严重性分级,根据日志严重性分级记录日志;可有条件地记录日志信息;条件中止程序。丰富的条件判定宏,可预设程序终止条件;异常信号处理。程序异常情况,可自定义异常处理过程;支持debug功能;自定义日志信息;线程安全日志记录方式;系统级日志记录;google perr
2016-09-17 18:01:43
651
原创 【C++】google gflags库
介绍gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。gflags使用起来比getopt方便,但是不支持参数的简写(例如getopt支持--list缩写成-l,gflags不支持)。安装暂留(TODO)基础使用需要引用头文件#include <gflags/gflags.h>在使用命令行参数的文件文件中(源文件或头文件),
2016-09-17 17:03:31
920
原创 【C++】C语言函数指针基础
参考自 http://blog.jobbole.com/44639/#jtss-ydnote 本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一
2016-09-02 20:36:45
1046
原创 【C++】使用sstream头文件进行格式转换
sstresam是C++中的一个头文件,提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。本文讨论如何使用里面的对象安全的进行类型转换。一、基本用法1. 简介C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。istringstream类用于执行C++风格
2016-09-02 16:45:55
1084
1
原创 【C++】C++ 读取文件最后一行产生的问题
之前写了一个读取文件的代码,发现每次读取的行数都比实际多一行。文档是一行行的数据,最后确实有一个空行,这是因为输出这个文档的时候,每一行都有一个换行符,所以必然导致最后一行有一个空行。这是一个非常普遍的现象,本文就研究一下如何正确的读取文本。首先,我们的测试文档如下,最后的点表示这是一个空行,实际中并没有。new 1.23fan 2jin 4.444ge 0.10203.1. 使用eof来
2016-09-01 20:21:26
14992
4
原创 安装vim中文帮助vimcdoc
文章来自 http://www.cnblogs.com/zhcncn/p/4042926.html安装vim中文帮助vimcdoc1. 下载:下载页面:http://vimcdoc.sourceforge.net/ 选择“Latest platform independent tarball, including an Linux/BSD installation script”【1】下载。2.
2016-09-01 17:06:00
1075
原创 【C++】C++语法的一些小问题
最近使用C++开发时,遇到一些小问题,特此记录自己定义了一个双重vector,就一直报错,例如vector<vector<int>>vec,一直提示cannot appear in a constant-expression。但是这句话在Visual studio 2010 中却能正常运行。 原因:在Linux下,或者C++的某些编译器或者某些版本的...
2016-09-01 15:27:55
1950
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅