caffe杂
一、finetune命令:
mpirun /home/zhangsuosheng/caffe_mpi/build/tools/caffe train -solver solver.prototxt -gpu all -weights ShuffleNet-.25x-g3-highacc/model_head.bin
二、快照命令:
mpirun /home/zhangsuosheng/caffe_mpi/build/tools/caffe train -solver solver.prototxt -gpu all -snapshot snapshot/_iter_41000.solverstate
三、待修改:
1、train.prototxt中
train的input层:
train的input路径,包括图片的prefix和train.txt的绝对路径;train的batch_size
test的input层:
test的input路径,包括图片的prefix和test.txt的绝对路径;test的batch_size
2、solver.prototxt中
train.prototxt的路径(net)
test的迭代次数(test_iter)
训练多少代测试一次(test_interval)(测试一次将用完所有测试数据,所需测试数据数=test_iter*测试的batch_size)
训练多少代保存一次快照(snapshot)
snapshot的存储路径(snapshot_prefix)
四、技巧
snapot实际与.bin一样,都是参数文件
如果网络变了bin文件是要变的。
但是我们在使用一些net时,例如googlenet、resnet、shufflenet,
我们不太会修改这些net结构,而是对输入以及其后面的一些层做改动,因此训练的时候是可以直接使用finetune参数的
分成多个branch
每个branch对应一个输入,使用一个net(例如googlenet shufflenet),产生一个feature
然后可以做多种尝试,例如讲feature加起来后面接一个fc,也可以每个feature单独处理
五、各层
1、silence层:
假如有某一层的某个top后面没有bottom,caffe训练的时候就会把这些top的结果都print出来,用Silence layer就是为了把接住以防止它print
例如:
通过修改网络将原来的多个分支改成了只有一个分支(head),但是但是因为label数据还是所有的,所以需要将不需要的label输入到silence,否则就会想上图这样print出来,很难看,因此加一个silence layer屏蔽掉label_eye_lo和label_eye_la
layer {
name: "slice"
type: "Slice"
bottom: "label"
top: "label_head_lo"
top: "label_head_la"
top: "label_eye_lo"
top: "label_eye_la"
slice_param {
axis:
slice_point:
slice_point:
slice_point:
}
}
layer {
name: "silence_eye"
type: "Silence"
bottom: "label_eye_lo"
bottom: "label_eye_la"
}
2、slice层:
切片,例如某一层读入了多个branch的标签,则可以在后面跟一个slice层,切片后得到所需的标签,然后与output层做差得loss层
3、bn层:batch normalization
传统的神经网络,只是在将样本输入输入层之前进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据进行标准化,还对隐藏层的输入进行标准化。
https://blog.csdn.net/whitesilence/article/details/75667002
https://arxiv.org/pdf/1502.03167.pdf
lr_mult为学习率因子
decay_mult为衰减因子
4、inner_proudct层(内积层,其实就是全连接层)
https://www.cnblogs.com/dupuleng/articles/4312149.html
5、Eltwise 层(Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作。)
例如实现A-B
layer
{
name: "eltwise_layer"
type: "Eltwise"
bottom: "A"
bottom: "B"
top: "diff"
eltwise_param {
operation: SUM
coeff:
coeff: -
}
}
https://www.cnblogs.com/kunyuanjushi/p/5937177.html
六、注意事项
注意shufflenet与shuffle的区别
shuffle指的是乱序操作,一般我们在处理数据的时候会用到,在数据增强,生成input文件(输入图片url,标签)之后进行shuffle,然后将shuffle后的input文件输入网络
python shuffle数据集:
https://blog.csdn.net/orangefly0214/article/details/80352310
一个层可以输出给多个层
一个层也可以接受多个层的输入
但是
1个bottom只能对应1个top
1个top只能对应0个或1个bottom(如果对应0个则会输出出来)
/build/tools/caffe与caffe.cpp源文件:
https://blog.csdn.net/teeyohuang/article/details/76778593
caffe杂的更多相关文章
- 基于window7+caffe实现图像艺术风格转换style-transfer
这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...
- caffe的python接口学习(7):绘制loss和accuracy曲线
使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...
- 基于Caffe的Large Margin Softmax Loss的实现(中)
小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文: http://www.miao ...
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- 基于Caffe的DeepID2实现(下)
小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...
- 基于Caffe的DeepID2实现(中)
小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...
- 基于Caffe的DeepID2实现(上)
小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...
- IOS 杂笔-9 (MD5 加密)
首先是一段对MD5的简介 *出自一位大牛之手* Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护 ...
- 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...
随机推荐
- JVM-String常量池与运行时常量池
Start with JVM 周志明先生著-<深入理解Java虚拟机>,书买回来好几天了,但是最近才准备开始搞一搞了(哭瞎…..).首先是第一章的Java以及JVM发展历史,大概知道了现行 ...
- Zabbix exp编写
#/usr/bin/python #*-*coding=utf-8*-* import urllib logo = '''\n _____ _ _ _ _____ _ |__ /__ _| |__ | ...
- redis存储对象与对象序列化详解
redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列化接 ...
- apply 判定变量类型
js 数据类型 6大类:object ,undefined,boolean,string,number,null,但是有时候我们经常要更准确的判断,比如,是数组,还是单例... 那么就用apply吧, ...
- 【★】深入BGP原理和思想【第…
前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...
- 运动规划(Motion Planning)
相关介绍: https://mp.weixin.qq.com/s?__biz=MzA5MDE2MjQ0OQ==&mid=2652786406&idx=1&sn=f937dd6a ...
- 运行jsp需要安装_______Web服务器。
运行jsp需要安装_______Web服务器. A.Apache B.tomcat C.WebLogic D.IIS 解答:BC Apache是PHP程序运行的服务器,IIS是.net程序运行的服务器 ...
- Revit 2017 编程须要用Visual Studio2015 +.NET Framework 4.52
一年一度的Revit产品公布时刻,我们抢先想各位介绍下Revit 2017的变化和新功能 Major changes and renovations to the Revit API API chan ...
- Ubuntu14.4下安装FTP
今天学习了Ubuntu上安装ftp的实例. 1.window上已经安装wamp(windows + apache + mysql + php) 2.window上已安装VMware Workstati ...
- Java并发框架——AQS之怎样使用AQS构建同步器
AQS的设计思想是通过继承的方式提供一个模板让大家能够非常easy依据不同场景实现一个富有个性化的同步器.同步器的核心是要管理一个共享状态,通过对状态的控制即能够实现不同的锁机制. AQS的设计必须考 ...