All Posts

VS下Release和Debug之间的区别

Debug: 通常称为调试版本,通过编译选项的配合,编译的结果通常包含调试信息,可以设置断点、单步调试、使用TRACE\ASSERT等调试输出语句并且编译器不会对代码进行任何优化,可以使开发人员提供强大的应用程序调试能力。 Release: 通常称为发布版本,是为了用户的使用,一般发布版本上不允许进行调试,所以Release版本通常不包含调试信息,同时,它往往进行了各种优化,以期达到代码量最小和效率最高的目的。 Debug版本程序通常比Release版本程序慢,尤其是在处理视频方面。在Release模式对程序进行挑食时候经常会遇到变量虽然已经初始化,但是在查看其值的时候却发现是一个随机数,而并不是已经初始化的值,有时候在对变量进行监视的时候,会出现找不到变量的情况,具体原因如下; Debug跟Release在初始化变量时所做的操作是不同的。 Debug是将每个字结尾都赋为0xcc,而Release的赋值近似于随机。如果程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以变量声明后马上对其初始化一个默认的值是最简单有效的办法。 代码存在错误在debug方式下可能会被忽略而不被察觉到,Debug方式下数组越界在有的情况下也不会出错,但是在Release版本中就会暴露出来。

Windows Caffe计算图片均值

图片在减均值后,会提高训练与预测的精度和速度。 1、二进制格式的均值计算 ../caffe/build/tools/Release/compute_image_mean ../file_name_lmdb /../mean.binaryproto 具体命令如上。 2、Python格式的均值计算 需要用到Python接口或者进行特征可视化,需要Python格式的均值文件。 具体Python脚本如下: import numpy as np import sys,caffe if len(sys.argv)!=3: print "Usage: python convert_mean.py mean.binaryproto mean.npy" sys.exit() blob = caffe.proto.caffe_pb2.BlobProto() bin_mean = open( sys.argv[1] , 'rb' ).read() blob.ParseFromString(bin_mean) arr = np.array( caffe.io.blobproto_to_array(blob) ) npy_mean = arr[0] np.save( sys.argv[2] , npy_mean ) 两个参数: 1、mean.binaryproto 二进制均值文件保存路径和文件名 2、mean.npy Python格式的均值文件保存路径和文件名

Caffe模型日志级别设置(Python)

在训练Caffe模型的时候,可能会根据需要做一些对于Caffe加载模型时日志的显示,代码如下: os.environ['GLOG_minloglevel'] = '2' import caffe 具体的日志级别如下: 0 - debug 1 - info (still a LOT of outputs) 2 - warnings 3 - errors

Win10+Anaconda2+vs2015+cuDnn+CUDA8.0安装caffe时需要注意的问题

总体的安装步骤按照官方文档或是windows10下用ninja编译配置caffe 在编译caffe实验环境的时候。应当对build_win.cmd中的内容进行相应的修改。 但是我在按照文章中进行编译时,会有一些错误,下面进行说明: 1、由于在官方知道说明文件中需要利用ninja来进行编译,目的是减少编译的时间,但是不知道我的电脑为什么,使用ninja编译的时候来时会报错: ninja: build stopped: subcommand failed. 2、同时在进行ninja指令单独执行的时候后,会出现错误: ninja: error: loading 'build.ninja': 系统找不到指定的文件。的错误。 但是按照我找到的一篇直接利用 Python+ git编译ninjawindows 安装ninja的文章编译后,生成的文件夹中使用ninja时不会报出该错误。 所以猜测,可能是ninja的用法有误。 解决方法: 在编译caffe的时候修改build_win.cmd文件中控制是否用ninja的参数,如下: :: Change to 1 to use Ninja generator (builds much faster) if NOT DEFINED WITH_NINJA set WITH_NINJA=0 将 = 号后原本为1 的内容改为 0,利用GCC去编译。 虽然时间会稍微久一点,但是不影响后续的使用。 除此之外,在进行build_win.cmd的时候,由于限于我国特殊国情,所以有些prebuild的组件下不下来,鉴于此我找到了github的一个链接,可以把它下下来放在相应的文件夹内,Caffe: Problem in downloading prebuilt dependenies #5679

Caffe命令备忘

1. Train阶段 2. Test阶段 root_to_caffe/build/tools/caffe test -model 指定模型描述文件文本 -weights 使用权重model -gpu 选用gpu设备 -log_dir 保存log位置

Git命令备忘

待更新

MacOS上传代码至GitHub的简单配置方法

准备工作: 在github上注册用户 下载git installer后(下载地址) 打开终端(在launchpad中搜索“终端”) 检查是否存在ssh,语句:cd ~/.ssh若提示没有该文件夹(-bash:cd: ~/.ssh: No such file or directory) 输入:ssh-keygen -t rsa -C youremailaddress 在-C 后输入你注册github时候的邮箱 命令执行成功之后,会出现以下提示,根据提示进行相应设置 Generating public/private rsa key pair. Enter file in which to save the key (/Users/username/.ssh/id_rsa):(默认路径,不填写则不更改) Created directory '/Users/username/.ssh'. Enter passphrase (empty for no passphrase):(在这里输入你的密码,4位以上) Enter same passphrase again:(重新输入确认) Your identification has been saved in /Users/username/.ssh/id_rsa. Your public key has been saved in /Users/username/.ssh/id_rsa.pub.(保存配置文件id_rsa.pub路径) The key fingerprint image SHA256:7Z2+JerI9it0bDxXeL++WxsU/I8ETlGzgATtXOwU4+4 email@address.com The key's randomart image is: +---[RSA 2048]----+ | .

用draw_net.py绘制网络图时的小问题

在Windows10下利用Caffe的Python接口进行绘制神经网络模型图时,出现了如下问题: 1. 无法加载pydot 解决方法: 在安装了Anconda的前提下使用 conda install pydot 但是由于conda设置之类的事情说是没办法找到相应的channel和下载文件。Google了一下,发现需要提前安装一下graphviz,于是: conda install graphviz 安装成功之后继续: conda install pydot 发现还是出错了,头皮发麻,用了pip: pip install pydot 终于提示安装成功。 至此解决了pydot和graphviz的问题。 2. 运行draw_net.py后有报错 pydot find_graphviz = pydot.graphviz.find_graphviz 'module' object has no attribute 'graphviz' 这个看了draw_net.py的源码,把文件中所有相应的pydot.graphviz改为pydot即可。 可能是由于pydot的版本不一样造成的结果。

用Caffe Python实现一个两层神经网络

1. 首先准备一下原始数据 # *-* coding: utf-8 *-* import pickle import numpy as np # 划分类别的边界 def cos_curve(x): return 0.25*np.sin(2*x*np.pi+0.5*np.pi) + 0.5 # samples保存二维点的坐标,labels标明类别 np.random.seed(123) samples = [] labels = [] # 单位空间内平均样本数为50 sample_density = 50 for i in range(sample_density): x1, x2 = np.random.random(2) # 计算当前x1对应的分类边界 bound = cos_curve(x1) # 为了方便可视化,舍弃太靠近边界的样本 if bound - 0.1 < x2 <= bound + 0.1: continue else: samples.append((x1, x2)) # 打标签,上半部分为1,下半部分为2 if x2 > bound: labels.

Lenet

Lenet-5网络结构示意图: 第一层:输入层32x32(28x28)大小的图像。明显特征能够出现在最高层特征监测子感受野的中心。(笔画断续、角点) 第二层:C1,卷积层。原始信号特征增强,降低噪音,不同的卷积核能够提取到不同的图像特征。 feature map个数:6个 32 * 32 conv kernel大小:5 * 5 神经元个数:(32 - 5 + 1) * (32 - 5 + 1) = 28 * 28 训练参数个数: (5 * 5 + 1) * 6 = 156 连接数: (5 * 5 + 1)* (28 * 28) * 6 = 122304 第三层:S2,下采样层。降低网络训练参数和模型的过拟合程度。两种方法:均值、最大值。 feature map个数:6个14 * 14,与C1中的2 * 2的区域相连。 神经元计算:sigmoid (2 * 2 的输入相加 * 一个训练参数 + 该feature map的bias)