C/C++
文章平均质量分 84
tianrolin
这个作者很懒,什么都没留下…
展开
-
Visual Studio 2017编译Lua 5.4静态库
Lua 编译官网下载最新Lua版本, Lua 5.4.3.2.Visual Studio 2017 新建工程原创 2021-07-28 11:13:50 · 1249 阅读 · 0 评论 -
Caffe支持多GPU分布式计算
Caffe允许多GPU间并行,与AlexNet不同,多GPU模式的内涵在于“不共享数据,却共享网络”。所以,允许多个solver存在,且应用到不同的GPU上去。第一个solver会成为root_solver,第二、第三个solver就会成为shared_solver。直接使用solver_count的地方是DataLayer层中的DataReader对象。每一个DataLayer都有一原创 2016-09-12 17:00:21 · 7936 阅读 · 0 评论 -
Caffe框架源码剖析(5)—卷积层ConvolutionLayer
ConvolutionLayer是BaseConvolutionLayer的子类,功能较为简单。类中不包含成员变量,仅包含几个虚函数的实现。conv_layer.hpp头文件的定义如下:原创 2016-09-18 09:20:11 · 3726 阅读 · 0 评论 -
Caffe框架源码剖析(4)—卷积层基类BaseConvolutionLayer
数据层DataLayer正向传导的目标层是卷积层ConvolutionLayer。卷积层的是用一系列的权重滤波核与输入图像进行卷积,具体实现是通过将图像展开成向量,作用矩阵乘法实现卷积。原创 2016-09-16 15:47:11 · 1700 阅读 · 0 评论 -
Caffe框架源码剖析(6)—池化层PoolingLayer
池化层往往在卷积层后面,通过降采样来降低卷积层输出的特征向量,同时改善结果,不易出现过拟合。最常用的降采样方法有均值采样(取区域平均值作为降采样值)、最大值采样(取区域最大值作为降采样值)和随机采样(取区域内随机一个像素)等。PoolingLayer类从Layer基类单一继承而来,没有再多的子类。具体定义在pooling_layer.hpp中,template class原创 2016-09-19 13:40:54 · 7005 阅读 · 0 评论 -
Caffe框架源码剖析(8)—激活函数层ReLULayer
LeNet中使用修正线性单元(Rectified Linear Unit,ReLU)代替Sigmoid作为激活函数,目的是为了加速收敛。激活函数层ReLULayer原理很简单,就是实现了对输入数据的非负处理,将小于零的数据进行了截断。原创 2016-09-20 09:45:52 · 5495 阅读 · 0 评论 -
Caffe框架源码剖析(1)—构建网络
今天花了一整天时间进行阅读和调试Caffe框架代码,单单是以Lenet网络进行测试就可见框架的大致工作原理。贾扬清在Caffe中大量使用了STL、模板、智能指针,有些地方为了效率也牺牲了一些代码可读性,处处彰显了大牛风范。为了他人阅读方便,现将代码流程简单梳理一下。原创 2016-05-18 21:02:44 · 4543 阅读 · 2 评论 -
使用Pycaffe绘制Caffe网络图
执行buildpython setup.py build执行testpython setup.py test输出:----------------------------------------------------------------------Ran 590 tests in 1.079sOK (skipped=7)继续执行installpython setup.py install输出原创 2016-10-02 11:51:33 · 2882 阅读 · 0 评论 -
VS2013下安装&编译Windows Caffe
想在Windows平台使用Caffe,吭哧吭哧下载了半天第三方库,后来忽然发现Microsoft官方移植了Caffe,配置起来简直太省心了…1. 从Microsoft官方Github上下载Caffe,源代码压缩包不到9MB大小,并将其解压缩到本地目录2.安装NVIDIA CUDA,目前最新版本是7.5,离线安装包约962MB(8.0版也即将要发布了)。3.安装NVIDIA cuDNN(CUDA Deep Neural Library原创 2016-05-15 22:10:31 · 10460 阅读 · 11 评论 -
Caffe框架源码剖析(7)—全连接层InnerProductLayer
全连接层InnerProductLayer的原理很简单,说白了就是矩阵乘法运算。正向传导时输出数据等于输入数据乘上权重,如果有偏置项就再加上偏置项。写成公式就是:top_data = bottom_data * weight + bias.矩阵乘法在CPU端采用OpenBLAS实现,在GPU端则采用NVIDIA cuBLAS实现加速。原创 2016-09-19 16:30:48 · 7029 阅读 · 3 评论 -
Caffe框架源码剖析(2)—训练网络
中间因为工程开发等杂七杂八原因暂停了Caffe源码分析,现在继续补上。上篇分析在函数 train() 中建立了网络,接下来就是进入训练网络步骤了。原创 2016-09-09 22:50:42 · 2876 阅读 · 0 评论 -
Caffe框架源码剖析(3)—数据层DataLayer
Caffe网络正向传导时,首先进行的是DataLayer数据层的传导。该层从文件读取数据,加载至它的上一层卷积层。反向传导时,因为数据层不需要反传,所以它的Backward_cpu()和Backward_gpu()都是空函数。下面看一下DataLayer类图关系。原创 2016-09-13 08:27:17 · 4225 阅读 · 0 评论 -
Windows平台基于Caffe框架的LeNet网络训练
在Windows平台下使用Caffe的确不如Linux来的方便,至少人家把Shell都已经写好了。但是像我这种VS重度依赖者,还是离不开微软大腿呀…废话不多说,一步步来吧。0. 为了后续文件路径访问的便利,我们先将$CAFFE_ROOT根目录添加到操作系统环境变量PATH中,并重启使之生效。1.首先需要从Yann LeCun的网站上下载手写数字图像库,共为四个压缩包约11MB大小,分别是train-images-idx3-ubyte.gz(训练集图像),train-labels-idx1-ubyte.g原创 2016-05-17 11:59:30 · 4193 阅读 · 10 评论 -
Caffe框架源码剖析(9)—损失层SoftmaxWithLossLayer
类SoftmaxWithLossLayer包含类SoftmaxLayer的实例。其中SoftmaxLayer层在正向传导函数中将100*10的bottom_data,通过计算得到100*10的top_data。这可以理解为输入数据为100个样本,每个样本特征数量为10,计算这100个样本分别在10个类别上的概率。公式如下:原创 2016-09-20 13:22:30 · 18982 阅读 · 0 评论 -
VS2015找不到stdio.h或new.h的Bug修复
今天尝试安装了VS2015,发现微软还是没有处理好一台计算机安装多个VS版本时环境配置问题。无论是建立Console控制台程序还是MFC程序,都提示缺少"stdio.h"或"new.h"头文件。VS工程默认的包含路径C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include下的确没有这些头文件,那么应该怎么办呢原创 2016-04-06 17:21:48 · 23918 阅读 · 3 评论 -
关于iterator的问题
程序如下,循环体中do_nothing,只是在第2个for循环中初始化语句是iter2=iter1。程序运行时CPU利用率达到100%。容器换成deque问题依旧,只是用list时不会发生这种情况。 #include using namespace std; void main() { int ia[10]={0,1,原创 2006-05-04 00:21:00 · 812 阅读 · 0 评论 -
易混淆的const -- 《C++ Primer》读书笔记
试图将一个非const对象的指针指向一个常量对象的动作,将引起编译错误。 const double *cptr cptr是一个指向double类型的const对象的指针。(我们可以从右往左把这个定义读为"cptr是一个指向double类型的、被定义成const的对象的指针"。)此中微妙在于cptr本身不是常量,我们可以重新赋值cptr,使其指向不同的对象,但不能修改cptr原创 2006-05-05 18:26:00 · 961 阅读 · 0 评论 -
关于《编程高手箴言》一书
今天在图书馆看见这本书,被它的第一章《程序点滴》所吸引了,便拿过来读了一个下午。郑渊洁说过这样一句话“一本书不管从哪页看起,5分钟后还不能吸引你,请毫不犹豫地扔掉它。”我的确被第一章所吸引了。 书的作者是梁肇新,他是豪杰公司的董事长兼首席程序员。既能坐的管理层第一把交椅,又能坐的技术员第一把交椅,必然有一番实力。 只是书中有一处,第252页中写道:原创 2006-05-11 00:53:00 · 1521 阅读 · 1 评论 -
轻松读《Effective C++ 2/e》
最近在读《Effective C++ 2/e》,不时被作者幽默的文字逗得发笑。可以这么说,这是我读过的最风趣的一本技术书。当然这也离不开侯捷大师精彩的翻译。如此轻松的翻下来,已经读完了全书的一半。当然,书中的内容都是基础性的C++内容,是每个C++程序员必须要掌握的知识。 举几处作者幽默的行文:1.(P76)如你所见,别名(aliasing)问题会以变化多端的形貌出现,所以你原创 2006-05-13 13:24:00 · 1220 阅读 · 0 评论 -
学习C++应该看的书
C++/OPP/OOD系列: 层级一:语法/语意(C++) [Lippman2000] Essential C++ Essential C++,by Stanley B. Lippman Addison Wesley Longman 2000,276 pages Essential C++ 中文版 ,侯俊杰 译,282页 [Gregory95] C++:The Core Language C+转载 2006-05-11 17:40:00 · 1047 阅读 · 0 评论 -
不可思议的C++,关于继承
问题是这么来的: ATL的窗口实现机制主要思想是继承和模板,这样做的目的是避免虚函数运行时类结构增大(同样,MFC中为了实现消息映射和RTTI,同样没有采用虚函数机制,而是采用宏来达到这一目的)。一个简单的示例程序如下:#include using namespace std;templateclass Base{public: Base(){}; virtual ~Ba原创 2006-05-19 01:17:00 · 1054 阅读 · 0 评论 -
关于OpenCV的介绍(摘自OpenCV官方wiki主页)
Intel® 开源计算机视觉库OpenCV什么是OpenCVOpenCV是Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 重要特性OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖与其它的外部库,尽管也可以使用某些外部库。 OpenCV 对非商业应用和商业应转载 2006-06-19 19:15:00 · 3457 阅读 · 1 评论 -
在单独线程中执行对象成员函数
问题的提出: 实际上所有线程都是用来处理C函数的,而不是C++类成员函数。标准库中提供一个API函数,这个函数以回调函数指针作为线程的执行代码并在单独的线程中调用回调函数。问题是在这样的线程库中不能创建执行对象成员函数的线程;只能使用普通的函数。因此,下列代码是失败的: // 启动线程库函数的线程 int thr_create (void (*pf)(), void* prm, thread转载 2006-06-12 11:48:00 · 1005 阅读 · 0 评论 -
利用编译器得知动态分配数组的大小
每次在CSDN论坛C++板块闲逛,都会有很多收获,时常遇到一些精彩的回复。 原帖地址http://community.csdn.net/Expert/topic/4822/4822941.xml?temp=.5199396中,摘录triace_zhang的回复如下: 主要看编译器采用的策略。如果是vc6.0的话在动态分配的内存段前面16个字节会用一个cookie记录该内存段的大原创 2006-06-15 17:10:00 · 1428 阅读 · 0 评论 -
Visual C++6.0中配置OpenCV
安装完OpenCV_b5a后,打开Visual C++ 6.0,在Tools -> Directories选项中,Show Directories for中选择Include files,在其中添加C:/Program Files/OpenCV/cv/includeC:/Program Files/OpenCV/cvaux/includeC:/Program Files/OpenCV/cxco原创 2006-06-19 19:12:00 · 3521 阅读 · 1 评论 -
医学影像“调窗”(window-leveling)的算法
图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 CT 里的例子有软组织、骨头、脑组织、肺、腹部等等。技术问题: 显示器往往只有 8-bit, 而数据有 12- 至 16-bits。 如果将数据的 min 和 max 间 (dynamic range) 的之间转换到 8-bit 0-255 去,过程是个有损转换, 而且出来的图像往往转载 2006-06-25 16:08:00 · 3050 阅读 · 0 评论 -
输出Win32程序中的错误
...{ // 获得信息 LPVOID lpMsgBuf; //Windows will allocate ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),转载 2008-02-26 09:59:00 · 584 阅读 · 0 评论 -
VS2012找不到SDKDDKVer.h的Bug修复
Visual Studio 2012找不到SDKDDKVer.h的Bug修复方法,通过手工修改props配置文件完美解决。原创 2014-06-07 17:46:44 · 42350 阅读 · 19 评论 -
Detected memory leaks! vc内存泄漏定位
Detected memory leaks!Dumping objects ->{98500} normal block at 0x05785AD0, 152 bytes long.Data: 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00Object dump complete.解决方法:在程序开始启动的地方(足够前的地方转载 2014-08-22 17:47:47 · 1307 阅读 · 0 评论 -
未加载mfc120ud.i386.pdb:VS2013调试MFC程序解决方法
刚使用VS2013时,想转入MFC库函数发现无法调试MFC代码。VS2013提示如下:网上查了一下才得知,VS2013不像以前的VS版本一样自带MFC的pdb文件。但是微软提供了Microsoft Symbol Server自动下载pdb文件,只是默认情况下没有打开。打开方式为:“设置”->“调试”->“符号”,选中“Microsoft 符号服务器”即可。这样在调试时,VS2013原创 2015-05-11 16:44:25 · 20593 阅读 · 6 评论 -
一篇关于拷贝构造函数的争论
原帖来自于CSDN,链接为:有关拷贝构造函数的说法不正确的是( ) 焦点在于 B) 类中只有一个拷贝构造函数 [错] C) 拷贝构造函数可以有多个参数 [对] 其实也是一个同问题。VC6.0下多参数的拷贝构造函数是可以通过编译并运行的。 对于拷贝构造函数参数的说话 copy constructo原创 2006-04-29 16:52:00 · 808 阅读 · 0 评论