caffe LOG LOG_IF】的更多相关文章

caffe使用了glog,在caffe的solver中输出都是用的LOG和LOG_IF LOG_IF是条件输出: LOG_IF(INFO, num_cookies > ) << "Got lots of cookies"; ‘,’后面是条件,这里是满足大于10就输出后面的字符串 LOG就是输出: LOG(INFO) << "Hello World"; LOG(ERROR) << "Hello World"…
一:搭建Caffe 1.下载happynear的Caffe源码https://www.github.com/happynear/caffe-windows,第三方库3rdparty文件http://pan.baidu.com/s/1bSzvKa. 2.将3rdparty文件(bin,include,lib)解压至caffe-windows(假设Caffe源码解压后的文件夹名为caffe-windows)中的3rdparty文件夹中,并将3rdparty/bin文件夹所在路径添加到环境变量中,使程…
画loss曲线需要用到此shell脚本 #!/bin/bash # Usage parse_log.sh caffe.log # It creates the following two text files, each containing a table: # caffe.log.test (columns: '#Iters Seconds TestAccuracy TestLoss') # caffe.log.train (columns: '#Iters Seconds Training…
Tags: Caffe Categories: Tools/Wheels --- 1. 将caffe训练时将屏幕输出定向到文本文件 caffe中自带可以画图的工具,在caffe路径下: ./tools/extra/parse_log.sh ./tools/extra/extract_seconds.py ./tools/extra/plot_training_log.py.example 日志重定向:在训练命令中加入一行参数,实现log日志定向到文件: caffe train --sover=/…
caffe log输出参考:http://blog.csdn.net/langb2014/article/details/50482150mac下用xcode开发caffe:http://coldmooon.github.io/2015/08/14/compile_caffe_cpp/ Xcode编译Undefined symbols for architecture xxx 错误总结:https://my.oschina.net/ioslighter/blog/363211Xcode, 给项目…
我们都知道python在2.x之后自带了一个模块import logging. 但是每次都要写log很麻烦,同时我想把info,debug之类的指令通过颜色分离开来. 于是写了一个简单的类似glog的小程序(完善是不可能完善的,checkeq这辈汁都不可能写的) import logging from colorlog import ColoredFormatter import sys import os def currentframe(): """Return the…
在执行训练的过程中,若指定了生成log信息,log信息包含初始化,网络结构初始化和训练过程随着迭代数的loss信息. 注意生成的log文件可能没有.log后缀,那么自己加上.log后缀.如我的log信息为pycaffe20180110-151247-31929.log 生成loss曲线图用到caffe中自带的小工具 caffe/tools/extra/parse_log.sh caffe/tools/extra/extract_seconds.py和 caffe/tools/extra/plot…
参考日志: http://blog.csdn.net/sunshine_in_moon/article/details/53529028 http://blog.csdn.net/lishanlu136/article/details/51491301 修改caffe-master\src\caffe文件夹下的common.cpp文件,或者用vs打开caffe解决方案. 编译common.cpp文件. 添加头文件 #include <boost/date_time.hpp> #include…
(原文地址:http://blog.csdn.net/liuweizj12/article/details/64920428) 在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化网络的训练.本文主要介绍在基于caffe框架训练网络时,如何利用caffe自带的一些实用的工具包来绘制曲线 一. 设置训练配置文件参数,保存训练时的参数至log文件 [python] view plain copy TOOLS=./build/tools LOG=example…
C++ google::InitGoogleLogging("XXX"); google::SetCommandLineOption("GLOG_minloglevel", "2"); Python # coding: utf-8 pycaffe_dir = '/home/zz/work/caffe-BVLC/python' import sys sys.path.insert(0, pycaffe_dir) os.environ['GLOG_m…
import re import pylab as pl import numpy as np if __name__=="__main__": accuracys=[] losses=[] with open(r'/home/wxl/bnscallog.txt','r') as f: lines=f.readlines(); print len(lines) str="".join(lines) str=str.replace('\n','') print len…
caffe中solver的作用就是交替低啊用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代的优化算法. solver.cpp中的Solver提供了执行模型训练的入口,在caffe.cpp中train函数的最后通过 solver->Solve()调用: template <typename Dtype> void Solver<Dtype>::Solve(const char* resume_file) { //检查是…
下面来看Solver<Dtype>::Solve(const char* resume_file) solver.cpp template <typename Dtype> void Solver<Dtype>::Solve(const char* resume_file) { CHECK(Caffe::root_solver()); LOG(INFO) << "Solving " << net_->name(); LO…
Solver类简介 Net类中实现了网络的前向/反向计算和参数更新,而Solver类中则是对此进行进一步封装,包含可用于逐次训练网络的Step()函数,和用于求解网络的优化解的Solve()函数,同时还实现了一些存储.读取网络模型快照的接口函数. solver.cpp源码 template<typename Dtype> void Solver<Dtype>::SetActionFunction(ActionCallback func) { action_request_funct…
SGDSolver类简介 Solver类用于网络参数的更新,而SGDSolver类实现了优化方法中的随机梯度下降法(stochastic gradient descent),此外还具备缩放.正则化梯度等功能.caffe中其他的优化方法都是SGDSolver类的派生类,重载了基类的ComputeUpdateValue()函数,用于各自计算更新的梯度. sgd_solver.cpp源码 // Return the current learning rate. The currently implem…
net.cpp部分源码 // 接着上一篇博客的介绍,此部分为Net类中前向反向计算函数,以及一些与HDF5文件或proto文件相互转换的函数. template <typename Dtype> Dtype Net<Dtype>::ForwardFromTo(int start, int end) { //执行第start层到第end层的前向计算过程 CHECK_GE(start, 0); //检查start >= 0, end < 总层数 CHECK_LT(end,…
Net类简介 Net类主要处理各个Layer之间的输入输出数据和参数数据共享等的关系.由于Net类的代码较多,本次主要介绍网络初始化部分的代码.Net类在初始化的时候将各个Layer的输出blob都统一保存在变量blobs_中,利用各个层的输入输出数据在blobs_的位置,可以方便地确定层之间数据传递的关系.Net中还利用类似的方法来存储各个层之间的学习参数,管理层之间的参数共享关系. net.cpp部分源码 template <typename Dtype> Net<Dtype>…
1.      Boost库:它是一个可移植.跨平台,提供源代码的C++库,作为标准库的后备. 在Caffe中用到的Boost头文件包括: (1).shared_ptr.hpp:智能指针,使用它可以不需要考虑内存释放的问题: (2).date_time/posix_time/posix_time.hpp:时间操作函数: (3).python.hpp:C++/Python互操作: (4).make_shared.hpp:make_shared工厂函数代替new操作符: (5).python/raw…
Caffe的整体流程图: 程序入口:main() int main(int argc, char** argv) { ..... ]))(); .... } g_brew_map实现过程,首先通过 typedef定义函数指针 typedef int (*BrewFunction)(); 这个是用typedef定义函数指针方法.这个程序定义一个BrewFunction函数指针类型,在caffe.cpp 中 BrewFunction 作为GetBrewFunction()函数的返回类型,可以是 tr…
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L-Softmax,据说单model在LFW上能达到98.71%的等错误率.更重要的是,小喵觉得这个方法和DeepID2并不冲突,如果二者可以互补,或许单model达到99%+将不是梦想. 再次推销一下~ 小喵的博客网址是: http://www.miaoerduo.com 博客原文:  http://…
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ 因为利用Pyhon来做数据的预处理比较方便,因此在data_layer选择上,采用了MemoryDataLayer,可以比较方便的直接用Python 根据set_input_array进行feed数据,然后再调用solver进行step就可以了.说一下我碰到的问题,当时检查了一下感觉没有哪里出错,但是报 Segmentation Fault(Core Abor…
数据变形 IO(二)中,我们已经将原始数据缓冲至Datum,Datum又存入了生产者缓冲区,不过,这离消费,还早得很呢. 在消费(使用)之前,最重要的一步,就是数据变形. ImageNet ImageNet提供的数据相当Raw,不仅图像尺寸不一,ROI焦点内容比例也不一,如图: [Krizhevsky12]给出了CNN打ImageNet的基本预处理,非常经典的" Random 256-224 Crop",即: 首先,对图片进行统一的缩放,无视宽高比,统一缩放成256*256(可利用Op…
你说你会关系数据库?你说你会Hadoop? 忘掉它们吧,我们既不需要网络支持,也不需要复杂关系模式,只要读写够快就行.    ——论数据存储的本质 浅析数据库技术 内存数据库——STL的map容器 关系数据库横行已久,似乎大家已经忘了早些年那些简陋的数据存储模式. 在ACM选手中,流传着“手艹数据库”的说法,即利用map<string,type>或者map<int,type>, 按照自己编码规则,将数据暂存起来,等待调用. 这就是KV数据库,最简陋的数据库,也是最实用的数据库. S…
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ Pooling 层一般在网络中是跟在Conv卷积层之后,做采样操作,其实是为了进一步缩小feature map,同时也能增大神经元的视野.在Caffe中,pooling层属于vision_layer的一部分,其相关的定义也在vision_layer.hpp的头文件中.Pooling层的相关操作比较少,在Caffe的自带模式下只有Max pooling和Aver…
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ data_layer应该是网络的最底层,主要是将数据送给blob进入到net中,在data_layer中存在多个跟data_layer相关的类 BaseDataLayer BasePrefetchingDataLayer DataLayer DummyDataLayer HDF5DataLayer HDF5OutputLayer ImageDataLayer…
不精通多线程优化的程序员,不是好程序员,连码农都不是. ——并行计算时代掌握多线程的重要性 线程与操作系统 用户线程与内核线程 广义上线程分为用户线程和内核线程. 前者已经绝迹,它一般只存在于早期不支持多线程的系统中. 它用模拟的方式实现一个模拟的多线程系统,不支持异步. 即,一个线程被阻塞了,其它线程也会被阻塞. 当今的操作系统几乎都默认提供了内核线程API,底层由操作系统实现. 内核线程的好处在于,它们之间支持异步,是"真"多线程. 操作系统的流氓软件 不过,内核线程也给线程的使用…
你需要一个管家,随手召唤的那种,想吃啥就吃啥. ——设计一个全局线程管理器 一个机器学习系统,需要管理一些公共的配置信息,如何存储这些配置信息,是一个难题. 设计模式 MVC框架 在传统的MVC编程框架中,通常采取设立数据中心的做法,将所有配置信息存在其中. 同时,将数据中心指针共享至所有类,形成一个以数据为中心,多重引用的设计模式. 如图,以MFC默认编程思路为例: 这种编程框架,虽然思路清晰,但是需要将共享指针传来传去,显得相当赘余. 全局静态框架 这是一种新手程序员经常习惯干的事. 不设立…
请以“仰望星空与脚踏实地”作为题目,写一篇不少于800字的文章.除诗歌外,文体不限. ——2010·北京卷 仰望星空 规范性 Caffe诞生于12年末,如果偏要形容一下这个框架,可以用"须敬如师长". 这是一份相当规范的代码,这个规范,不应该是BAT规范,那得是Google规范. 很多自称码农的人应该好好学习这份代码,改改自己丑陋的C++编程习惯. 下面列出几条重要的规范准则: ★const 先说说const问题,Google为了增加代码的可读性,明确要求: 不做修改的量(涵盖函数体内…
PS:本系列为本人初步学习caffe所记,由于理解尚浅,其中多有不足之处和错误之处,有待改正. 一.实现方法 首先,将文件名与它对应的标签用 std::pair 存储起来,其中first存储文件名,second存储标签, 其次,数据通过 Datum datum来存储,将图像与标签转为Datum 需要通过函数ReadImageToDatum() 来完成, 再次, Datum 数据又是通过datum.SerializeToString(&out)把数据序列化为字符串 string out;, 最后,…
借鉴于langb2014的  http://blog.csdn.net/langb2014/article/details/50458520 与liukailun09的  http://blog.csdn.net/liukailun09/article/details/51119052 1.数据 下载:来自langb2014大神的数据:http://pan.baidu.com/s/1nuqlTnN 数据介绍: 共有500张图片,分为大巴车.恐龙.大象.鲜花和马五个类,每个类100张.编号分别以3…