深度学习caffe loss值不变中ContrastiveLossLayer怎么用

本学习笔记的作用在于为后面打基础,没有什么实际的东西可以观测到,要可视化特征..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
caffe学习笔记2 用一个预训练模型提取特征-薛开宇
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Caffe深度学习框架上手教程
查看: 32673|
评论: |原作者: caffe官网教程|来自: caffe官网教程
摘要: Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 贾扬清,目前在Google工作。
是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的&,目前在Google工作。  Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:Caffe::set_mode(Caffe::GPU);Caffe的优势上手快:模型与相应优化都是以文本形式而非代码形式给出。&Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。速度快:能够运行最棒的模型与海量的数据。&Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.模块化:方便扩展到新的任务和设置上。&可以使用Caffe提供的各层类型来定义自己的模型。开放性:公开的代码和参考模型用于再现。社区好:可以通过BSD-2参与开发与讨论。Caffe的网络定义Caffe中的网络都是有向无环图的集合,可以直接定义:&name: "dummy-net"
layers {&span&&span&name: &span&"data" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"conv" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"pool" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"loss" …&/span&&/span&&/span&}数据及其导数以blobs的形式在层间流动。Caffe的各层定义Caffe层的定义由2部分组成:层属性与层参数,例如name:"conv1"
type:CONVOLUTION
bottom:"data"
top:"conv1"
convolution_param{
num_output:&span&20
kernel_size:5
weight_filler{
type: "&span style="color: #c0504d;"&xavier&/span&"
}  这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数。 BlobBlob是用以存储数据的4维数组,例如&对于数据:Number*Channel*Height*Width对于卷积权重:Output*Input*Height*Width对于卷积偏置:Output*1*1*1训练网络网络参数的定义也非常方便,可以随意设置相应参数。甚至调用GPU运算只需要写一句话:solver_mode:GPUCaffe的安装与配置  Caffe需要预先安装一些依赖项,首先是CUDA驱动。不论是CentOS还是Ubuntu都预装了开源的nouveau显卡驱动(SUSE没有这种问题),如果不禁用,则CUDA驱动不能正确安装。以Ubuntu为例,介绍一下这里的处理方法,当然也有其他处理方法。  生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成leveldb格式:训练网络:# sudo vi/etc/modprobe.d/blacklist.conf
# 增加一行 :blacklist nouveau
sudoapt-get --purge remove xserver-xorg-video-nouveau
#把官方驱动彻底卸载:
sudoapt-get --purge remove nvidia-*
#清除之前安装的任何NVIDIA驱动
sudo service lightdm stop
#进命令行,关闭Xserver
sudo kill all Xorg安装了CUDA之后,依次按照安装BLAS、OpenCV、Boost即可。Caffe跑跑MNIST试试在Caffe安装目录之下,首先获得MNIST数据集:cd data/mnist
sh get_mnist.sh生成mnist-train-leveldb/ 和&mnist-test-leveldb/,把数据转化成leveldb格式:cd examples/lenet
sh create_mnist.sh训练网络:sh train_lenet.sh让Caffe生成的数据集能在Theano上直接运行不论使用何种框架进行CNNs训练,共有3种数据集:Training Set:用于训练网络Validation Set:用于训练时测试网络准确率Test Set:用于测试网络训练完成后的最终正确率Caffe生成的数据分为2种格式:Lmdb和Leveldb它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。Google Protocol Buffer的安装Protocol Buffer是一种类似于XML的用于序列化数据的自动机制。&首先在Protocol Buffers的中下载最新版本:&&解压后运行:./configure
$ make check
$ make install
pip installprotobuf添加动态链接库export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATHLmdb的安装pip install lmdb要parse(解析)一个protobuf类型数据,首先要告诉计算机你这个protobuf数据内部是什么格式(有哪些项,这些项各是什么数据类型的决定了占用多少字节,这些项可否重复,重复几次),安装protobuf这个module就可以用protobuf专用的语法来定义这些格式(这个是.proto文件)了,然后用protoc来编译这个.proto文件就可以生成你需要的目标文件。&想要定义自己的.proto文件请阅读:&编译.proto文件protoc--proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR--python_out=DST_DIR path/to/file.proto--proto_path 也可以简写成-I 是.proto所在的路径
输出路径:
--cpp_out 要生成C++可用的头文件,分别是***.pb.h(包含申明类)***.pb.cc(包含可执行类),使用的时候只要include “***.pb.h”
--java_out 生成java可用的头文件
--python_out 生成python可用的头文件,**_pb2.py,使用的时候import**_pb2.py即可
最后一个参数就是你的.proto文件完整路径。Caffe (CNN, deep learning) 介绍Caffe -----------Convolution Architecture For Feature Embedding (Extraction)Caffe 是什么东东?CNN (Deep Learning) 工具箱C++ 语言架构CPU 和GPU 无缝交换Python 和matlab的封装但是,Decaf只是CPU 版本。为什么要用Caffe?运算速度快。简单 友好的架构 用到的一些库:Google Logging library (Glog): 一个C++语言的应用级日志记录框架,提供了C++风格的流操作和各种助手宏.lebeldb(数据存储): 是一个google实现的非常高效的kv数据库,单进程操作。CBLAS library(CPU版本的矩阵操作)CUBLAS library (GPU 版本的矩阵操作)Caffe 架构预处理图像的leveldb构建&输入:一批图像和label (2和3)&输出:leveldb (4)&指令里包含如下信息:conver_imageset (构建leveldb的可运行程序)train/ (此目录放处理的jpg或者其他格式的图像)label.txt (图像文件名及其label信息)输出的leveldb文件夹的名字CPU/GPU (指定是在cpu上还是在gpu上运行code)CNN网络配置文件Imagenet_solver.prototxt (包含全局参数的配置的文件)Imagenet.prototxt (包含训练网络的配置的文件)Imagenet_val.prototxt (包含测试网络的配置文件)Caffe深度学习之图像分类模型AlexNet解读在imagenet上的图像分类challenge上Alex提出的alexnet网络结构模型赢得了2012届的冠军。要研究CNN类型DL网络模型在图像分类上的应用,就逃不开研究alexnet,这是CNN在图像分类上的经典模型(DL火起来之后)。在DL开源实现caffe的model样例中,它也给出了alexnet的复现,具体网络配置文件如下接下来本文将一步步对该网络配置结构中各个层进行详细的解读(训练阶段):各种layer的operation更多解释可以参考&从计算该模型的数据流过程中,该模型参数大概5kw+。conv1阶段DFD(data flow diagram):&conv2阶段DFD(data flow diagram): conv3阶段DFD(data flow diagram):conv4阶段DFD(data flow diagram):&& &&conv5阶段DFD(data flow diagram):&fc6阶段DFD(data flow diagram):&fc7阶段DFD(data flow diagram):&& & & & & && fc8阶段DFD(data flow diagram):&& & & & & &&
上一篇:下一篇:
快毕业了,没工作经验,
找份工作好难啊?
赶紧去人才芯片公司磨练吧!!& 浏览文章
英特尔院士概述深度学习愿景与优化,Caffe for Xeon Phi成亮点
来源:网络编辑:佚名
时间:人气:
“机器将超级计算和消费者结合在一起;其影响将无处不在。”从Pradeep&Dubey说起,他是英特尔院士、英特尔并行计算实验室主任,他概述了深度学习(机器学习的一种特殊形式)的关键方面,以及芯片制造商如何利用新技术给新应用带去辉煌的未来,这将跨越高性能计算,企业和消费者以及最终用户整个领域。Pradeep解释说,“训练模型是重中之重”。自从80年代以来,数据科学家就一直使用机器学习来创建模型,以解决复杂的模式识别问题。近年来对机器学习兴趣如潮涌,特别是深度学习,这是技术创新的结果,现在能够提供足够的计算能力,大量的数据和新兴算法。这些革新使得深度神经网络这样的监督式学习方法可以在图像或语音识别任务中得到有用的预测,并且准确性非常好,时常与人工操作相当甚至更好。他说,“它的影响将无处不在”。对于外行人来说,深度学习是被称为机器学习的计算机科学广泛技术领域中的一个子集。如今大多数机器学习技术仅仅只有一个或两个介于输入数据层和输出预测层之间的隐藏层。然而,另一方面,深度学习由于在输入层和输出层之间有多个隐藏层而归属于机器学习,“深度学习”因此而得名。近期深度学习革新影响受惠于技术的创新,为深度学习提供了足够的计算能力和海量的数据。在深度学习中使用多层模仿了生物大脑的结构——比如人类——日益深入的层(从输入数据的角度看)处理日益抽象的表示。Pradeep观察到,这些深层次的抽象让深度学习技术能正确地识别弯曲汤勺以及处理其他艰难转换问题的能力,而内在计算负担保持原样。机器学习技术的魔力被IBM的“沃森”计算机展示得淋漓尽致,2011年它战胜了两位最优秀的《危险边缘》节目冠军。Pradeep对于将工业渗透到深度学习技术潜力之中感到兴奋——特别是当他谈到英特尔使这项技术更经济实惠的时候。“这将是魔法!”他说,并预测道,“这就是成功的定义!”。举一个例子,他描述了一条成功之路,人们使用云端训练的深度学习模型可以解决复杂的,实际的金融、医疗或其他的实际问题。他说,“训练的惊人之处在于,它可能会创建一个模型,这个模型简洁得足以存储并运行在一部手机上,从而使手持计算设备执行超出它计算能力的识别任务”。在手机(或嵌入式系统)上运行云端或者超级计算训练的深度学习模型的能力意味着每个人都能够使用深度学习。为了清楚说明此影响,Pradeep指出,“沃森”计算机的自然语言处理,我们在web页面上看到的图像识别以及其他深度学习问题的影响都无处不在。深度学习最大的挑战是,训练框架必须准确,高效,并且具有扩展处理大量数据的能力。从性能角度来看,他按照机器训练成准确性可被接受或简洁时所花费的时间来量化训练。对于那些希望“开始动手实践”的人来说,Pradeep强调说,英特尔构建了诸多模块,可以使大众开始进行机器学习开发。例如,英特尔正在使用深度学习特定的功能加强它广泛应用的MKL(Math&Kernel&Library),并且将最近宣布的DAAL(Data&Analytics&Acceleration&Library)定位为分布式机器学习构建模块,它对基于IA的硬件平台进行了优化。这两个库可以通过“社区许可”免费获得。关于这一点,今年英特尔还公布了Intel&Xeon处理器和Intel&Xeon&Phi处理器的Caffe优化整合(Caffe Optimized Integration for Intel Xeon and Intel Xeon Phi)时间轴。Caffe是伯克利开发的一款流行的深度学习框架。由于DAAL与英特尔MKL库配合最佳,CPU和Intel&Xeon&Phi系列产品的效率就得到了保证。正如Pradeep所说,“使用这两个库,避免了艰苦的工作”。当然,这种做法意味着用户可以利用高级接口和英特尔工具,这些工具在Intel&Xeon服务处理器上和即将推出的下一代Intel&Xeon&Phi处理器“Knights&Landing(KNL)”上都可以使用。作为一个优秀的科学家,Pradeep承认,深度学习理论仍处于开发阶段并有待提高,深度学习是一个新兴领域,“深度学习的理论基础,将训练运行在大型分布式平台时面临的计算挑战始终是工业界和学术界所要处理的问题”。Pradeep在透露他对最新一代英特尔技术感到兴奋的一些原因时显得更加谨慎——也就是即将推出的英特尔全路径架构(Intel&OPA,Intel Omni-Path Architecture)和Xeon&Phi Knights&Landing处理器。但他透露Intel&OPA“可以构建机器学习友好型网络拓扑架构”。如果不考虑太多的技术细节,所有的深度学习算法都需要计算模型在所有样本上进行的每一个训练算法中每一步的累计误差。优化方法使用这个累计误差来确定模型的下一组参数。不幸的是,对于大数据集或复杂机器学习模型而言,计算累计误差代价是非常大的。继续来看看,Pradeep还为我们提供了一个他带领团队正在开发的新的智能方法,可以将深度神经网络训练扩展到大量处理节点上,从而在目前最优的基础上显著减少了训练时间。他在此不便透露更多,因为这项工作成果将要发布。然而他很高兴与我们分享他的团队迄今为止在减少训练深度神经网络拓扑所用时间上取得的具体表现,它超过了任何已公布的结果。更具体地讲,使用OverFeat-FAST深度神经网络拓扑结构,他的团队在目前64个节点的Intel&Xeon E5-2697处理器上将训练时间降低到了8小时,使用即将推出的Knights&Landing平台会将时间降低到3-4个小时。Pradeep这样描述目前使用深度学习训练得到的模型进行预测(或者打分)的英特尔技术,对基于消费者的深度学习应用程序就像是橡胶满足于道路一样。Pradeep指出,打分比训练具有更多的计算友好性,因此,英特尔平台为预测任务提供了很好的构建效率,吞吐量和能源效率。此外,Pradeep注意到FPGA进一步提高特定深度学习预测任务的能效潜力。这些说法得到了微软的支持,他们在数据中心使用FPGAs时同样注意到了类似的能效优势。总之,Pradeep看到了深度学习和英特尔技术应用的辉煌未来。他指出,这是一个新兴领域,英特尔已经将自己很好的定位于满足市场需求,同时提供可以纳入类似于伯克利CAFFE深度学习框架的高级框架的硬件和工具,使大众都能进行深度学习开发。然后,用户可以利用从主流Intel&Xeon处理器到最新一代的Intel&Xeon&Phi&Knights&Landing处理器和顶级超级计算机上的所有东西,使人们可以将大量标记数据集的可用性从小型向非常,非常大型方面转变,最终,所有人都可以开始进行廉价的深度学习。原文链接:&Intel&Fellow&Outlines&Bright&Future&for&Deep&Learning(编译/刘翔宇&审校/赵屹华、朱正贵 责编/仲周建丁)&关于译者:&刘翔宇,中通软开发工程师,关注机器学习、神经网络、模式识别。&
“英特尔院士概述深度学习愿景与优化,Caffe for Xeon Phi成亮点”的相关内容有:
【编者按】创业者们纷纷涌入大数据市场,尾随的VC们也是挥金如土,导致大数据创业市场目前已经非常拥挤。
【CSDN现场报道】第六届中国云计算大会于-23日在北京国家会议中心拉开帷幕。本次大会立足实践,以国际化的视野,帮助与会者了解全球云计算技术的发展趋势;从应用出发,探讨交通、医疗、教育、金融、制造、数字娱乐等行业领域的实践经验;并通过技术专场、产品发布和培训课程等方式,深度剖析云计算大数据的核心技术。
【编者按】证监会“捕鼠升级”的风声,牵动着基金行业的神经。近期证监会大数据稽查加力,不禁使弱市下的公募基金经理们“人人自危”,随着大数据技术的进步,围绕大数据“捕鼠”逐渐成为行业人士关注的焦点,正是由于大数据出手,使得查找“老鼠仓”的效率几何级数提升,而且追溯时间可推到七八年前甚至更长时间。
热门文章排行
iOS 信息发送库 SOMessaging</…浏览 212
Kgmall ShopInShop 金刚java C2C/…浏览 128
python高性能httpserver 服务器+w…浏览 125
2048游戏聚合版(CocosEditor…浏览 122
别踩白块儿游戏源码(CocosEdi…浏览 102肉贩:愿意拿出1千元与老太打赌猪肉不会发光。
因《东莞空姐服务城管》过于火爆,造成不良影响。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  在深度学习(Deep Learning)的热潮下,Caffe作为一个高效、实用的深度学习框架受到了广泛的关注。了解Caffe研发的背景、愿景、技术特色、路线图及其开发者的理念,对于我们选择合适的工具更好地进行深度学习应用的迭代开发大有裨益。《程序员》记者近日深度对话Caffe作者贾扬清,剖析Caffe的起源、目标、差异性、现存的一些问题和改进工作,以及未来的规划。
  起源故事
  《程序员》:请介绍一下您自己与深度学习结缘的故事,以及开发Caffe的背景和初衷?
  贾扬清:我经常和人开玩笑说,“我写Caffe的原因是因为我不想写毕业论文。”
  我最早开始接触深度学习大概是在2012年,主要是做sparse coding以及相关的特征学习。在2013年的时候,我和伯克利心理学系的Thomas Griffith教授开始合作研究这样一个问题:我们人类在个人成长过程中是如何形成“类别”这样的概念。我们发表的文章提出了一个很好的概率框架来表达人的行为(参见我在NIPS 2013的文章),但是因为图像上提取的特征比较弱,所以可以外推的结果比较有限。2013年的时候,因为Alex Krizhevsky在ImageNet的成功,我开始考虑把CNN的特征用到心理学的这个实验上,于是就写了Decaf。Decaf需要基于cuda-convnet来训练,但是我们通过Decaf验证了深度学习特征的优异的可移植性(参见我们在ICML的Decaf文章)。这个应该算是我开始考虑实现一个完整的深度学习框架的初衷。
  然后在2013年下半年的时候,NVIDIA的学术捐赠计划送了我一块K20 GPU,我当时正好在写毕业论文,空闲之余就准备把这个计划实现出来(对一个研究生而言,GPU很贵的)。我从9月下旬开始,先自己攒了一个机器,然后大概花了两个多月的时间写了整个架构和ImageNet所需要的各个实现。起初纯粹是因为兴趣使然作为一个业余的项目,后来因为越来越觉得有意思(写代码可能和玩游戏上瘾差不多),花在Caffe上的时间逐渐变成20%、40%、80%,后来在上下班的地铁上也开始编程序,毕业论文倒是没有太重视,所幸我的导师开明,也没有说什么。Caffe写完以后在我们组里面试用,大家都觉得它挺好使 - 比如Jeff和Ross利用Caffe的训练代码实现了R-CNN。到了11月份的时候,我开始考虑是不是要开源Caffe,然后12月份正式开源。顺便一提,我的毕业论文最后是第二年5月份才写完的。
  在接下来的一年里面Caffe开始吸引很多其他的用户和开发人员,特别是NVIDIA开始帮助我们做更多的加速,Berkeley也成立了Berkeley Learning and Vision Center来组织和吸引工业界的研究人员共同开发多个开源项目(包括Caffe)。我毕业以后还在继续和伯克利的同事开发Caffe,同时在Google继续搞深度学习的应用和研究;我们在伯克利也建立了一个核心的Caffe团队:Evan Shelhamer开始用他以前在开源社区的经验来牵头多方面的合作;Jeff Donahue在业余时间还帮助Pinterest建立了他们的深度学习系统;Jonathan Long给Caffe提供了例如Python接口等等最新的特性。而且,Caffe开始吸引世界各地的人来尝试和使用深度学习的技术,这个是我们所始料未及的。
  哦,对了,因为Caffe的缘故,最开始的心理学项目反而被我搁下了,而后也是诸事繁杂,希望有一天我还能够继续回去完成那个项目。
  《程序员》:在Caffe的开发过程中,哪些事情让您印象深刻?克服的最大挑战是什么?
  贾扬清:让我印象最深刻的事情是,写Caffe其实占用了我写毕业论文的时间,我最开始向我导师保证说十二月底可以写完论文(因为年底就要开始工作了),结果半路跑去写Caffe了,拖了好长时间的进度。有一次我和我导师开会说我个人的担心,然后他问我“你是想多花时间写一个大家估计不是很在意的毕业论文呢,还是多花时间写一个将来大家都会用的系统?”我觉得博士生多年,我导师教我最多的就是分清主次,这一点我获益良多。
  另一个好玩的小事情是,我2013年在Google实习喝了太多的咖啡,起Decaf这个名字是为了督促自己把咖啡戒了。后来因为GPU速度快就起了Caffe这个名字。伯克利我们组的研究生都很喜欢Caffe,向我导师要经费买了一个冰滴咖啡的咖啡机,结果我们后来又天天喝Evan做的咖啡,戒不掉了。Caffe的核心开发人员在工作允许的范畴下还会做一些consulting的工作,邮箱名字也因此起了caffe-coldpress。
  说到挑战的话,Caffe是我做的第一个从零开始,而且有实际工程意义的项目,而且是初学GPU,所以在编程上开始还是挺困难的。但是我觉得最大的挑战是决定应该以什么方式来公布Caffe:是成立一个创业公司,是作为一个纯科研不能商用的程序库,还是作为一个完全开源的系统。每个方向都有人偏好,而且平心而论,开源这条道路也许在经济上并不是最优的。我大概前后花了一个星期的时间来说服和我合作的每个人,甚至在一定时候需要用“这是我写的框架,所以我应该有决定权”这样的理由来解释。强迫别人接受自己的观点不是我的个性,所以我觉得很幸运最后大家都很支持这个决定。作出开源的决定应该是整个项目里面最挑战的一部分 - 写代码倒在其次了。
  在Caffe之前,深度学习领域缺少一个完全公开所有的代码、算法和各种细节的框架,导致很多的研究人员和博士生(例如我)需要一次又一次重复实现相同的算法,这不好。我觉得作为一个科研人员,还是需要有开放的胸怀来帮助整个社区的发展,所谓不忘初心,方得始终。反正咖啡还是买得起的,夫复何求呢。
  社区生态及问题探讨
  《程序员》:作为一个开源工具,Caffe的社区建设和代码管理情况如何?
  贾扬清:Caffe目前主要还是一个伯克利主导,然后由github加上caffe-users邮件组所组成的一个比较松散和自由的社区。因为主要的贡献者都还是学生(包括已毕业的学生),而且大家主要的工作也还在科研上面,所以社区主要是依靠Caffe的使用者来自发组成的。我们也在摸索一些新的方法,比如说邀请工业界熟悉Caffe,贡献过Caffe的代码的朋友来参与管理Caffe,或者组成一个简单的committee/foundation来帮助代码管理等等。实话说,Caffe在社区建设代码管理上还是有很多可以进一步提高的地方,这方面我们也在继续摸索。
  《程序员》:经常有人说,好的开源工具不等于好的产品。我了解的Caffe的安装和配置还比较复杂,有开发者评价说Caffe文档好,上手方便。但那个巨大的protobuf配置文件就是个灾难,而且改动代码很麻烦。对于这个问题,有什么解决办法?或者说使用Caffe还需要一定的门槛?
  贾扬清:Caffe的安装和配置的确是一个比较让人头疼的问题,特别是如果不熟悉Linux或者不在Linux的系统上的话,安装Caffe可能需要不少的一段时间。最近我们也在社区的帮助上面做一些改进,主要是:
  NVIDIA在帮助我们将Caffe放到apt-get系统里面,使得将来可以直接apt-get install caffe;
  我们在完善各个layer的文档,使得大家更容易地实现一些自己的算法;
  在protobuf上,我们加入了Python Wrapper,可以借助简单的Python函数来定义网络,而不是写一个巨大的protobuf(GoogLeNet如果手写有两千多行… 的确有点发指)。
  我在简化一些Caffe的依赖关系,使得我们不需要编译所有的库(比如说leveldb,HDF5等等)也可以使用Caffe,或者可以根据自己需要选择相应地库文件来编译。
  总的来说,因为是个C++的框架,所以使用Caffe还是有一定的门槛,如果大家遇到问题,也可以在caffe-上面发信交流。
  《程序员》:另外有一位CSDN博主之前写了Caffe使用体验,谈到套用原有模型很方便,但个性化就要读源代码,比较痛苦;Theano只是提供计算函数,搭Network的细节都是自己定,非常灵活,但速度不如Caffe。针对目前的深度学习框架,您主要关注哪些?您认为他们各自的优劣如何?开发者应该如何选择?
  贾扬清:我读过那篇文章,的确,Caffe在文档上相对还比较痛苦一些。这个主要是因为我们更多的定位在科研上面,假设说大家都会有一定的时间和精力来读代码。目前我们主要能做的是尽量多地公开一些样例和教程,使得大家在各种应用上都能比较容易地找到和需求比较相似的例子。在文档方面,我们也在增加一些代码当中的文档和注释,但是因为我们主要的开发人员还是在校的学生,所以重心还是放在科研上。大家可以看见Caffe team最近开创性的工作很多,包括了classification,detection,segmentation,以及最近用LSTM来实现图像描述这样的工作等等。如果开源社区愿意帮助提高现在的文档水平的话,我们感激不尽:)
  Theano和Caffe的定位稍微有点不同:Theano主要定位在更加容易地做一些快速的研究和迭代上,所以实现的方法很多时候是基于Python以及底层的C转译的。这样做的好处是可以更加容易地修改代码,但是优化上就不那么容易。我的感觉是,可以采用Python这样的语言来做很快的迭代,但是等到确定一个具体的算法以后,可能还是需要转成C++/CUDA的代码来达到比较好的速度。从这一点上,Caffe提供了Python Layer来帮助做一些prototype,应该会有帮助。
  《程序员》:您长期在做CV方面的工作,能否透露Caffe在您的工作中的使用情况和实际效果?在基于Caffe的深度学习方面有什么通用的优化技巧可以分享?
  贾扬清:Caffe最开始的确就是为了在我们平时科研上使用所写的,所以在伯克利我们所有涉及到Deep Learning的工作也都会基于Caffe来进行。我在Google也同时会使用Google Brain的大规模的机器学习框架DistBelief(参见Google在NIPS 2012的文章),但是我会经常使用Caffe来做一些快速的prototype和实验,因为Caffe有着更小的系统框架,使得一些探索性的实验更加容易一些。值得一提的是,Google的研究人员经常会使用各种自己熟悉的开源框架来进行小规模的研究,然后用DistBelief来作为一个通用的框架实现大规模产品级别的部署。
  说到通用的优化技巧,我的经验就是从简单的实现开始,寻找到瓶颈以后再做具体的优化。一个比较直接的例子是Caffe的卷积层:我当时使用了一个将它转化为矩阵乘积的方法来进行计算,虽然相对比较耗费内存,但是在实际应用中一度是最快的实现。后来因为卷积在Deep Learning当中的重要性,大家纷纷开始实现更加有效的算法(比如说cuDNN),解决了最初实现中的种种问题。
  另外,我个人觉得在研究生阶段,特别是机器学习的研究生阶段,学一点实际的编程语言(比如C++和Python)是很有帮助的,我以前大部分程序都在Matlab下实现,但是改用C++和Python以后,发现Matlab下很难实现的很多优化,比如说多GPU,多个机器的通信等等,可以非常容易地实现出来,于是就不再用Matlab了(听起来有点广告嫌疑…)。
  《程序员》:我们通常采用Linux+Caffe,但也有很多人在Windows下跑Caffe,我看到一个介绍,说Windows版本的Caffe比Linux版本还要快,整合cuDNN速度就更快了,是否存在这样的情况?
  贾扬清:我个人对此持谨慎的怀疑态度,因为主要的程序都是C++编写的,所以应该在速度上没有什么差别,看到的不同可能只是因为在两个平台上编译器优化不同的结果。因为编译器的不同优化选项会影响到速度,所以我一般提及速度的比较的时候会比较谨慎。一般而言,只要底层的硬件相同,像Caffe这样主要是数学计算的系统,速度应该是大同小异的。当然,也有可能Windows上的GPU驱动做的比Linux好,所以使得在GPU上运行速度比较快,这个是有可能的,但是我个人没有太多经验(我一般只用Linux和Mac)。
  《程序员》:深度学习框架一般都整合CUDA、cuDNN,我看到NVIDIA最新推出的DIGITS率先支持Caffe,这需要Caffe进行一些特别的工作吗?另外Caffe社区与NVIDIA开源团队如何互动?
  贾扬清:NVIDIA对于Caffe的支持非常好,这一点我们整个Caffe team也非常感谢。基本上,除了和NVIDIA的开发人员讨论一些实现细节之外,我们没有对DIGITS做任何特殊的改动。从一定的方面来说,这也说明整个框架很容易移植。NVIDIA对Caffe的支持主要在两方面:软件上提供CuDNN的整合和优化,以及硬件上对于科研的支持。我们Caffe的核心成员定期会和NVIDIA的团队开会讨论双方的需求和遇到的问题,以及新版本发布的时候的测试、集成的流程。总的来说合作非常愉快,而且也获得了不错的成果。
  《程序员》:大规模的并行在深度学习中的作用很重要,能否介绍Caffe并行版,包括单机多卡并行和多机并行的Roadmap和当前进度?
  贾扬清:Caffe并行的实现应该很快就会整合进来,因为其实实现本身并不困难:我最近几次报告都提到了基于MPI的实现方法。目前在伯克利我们有一个基于自己的机群所编写的并行实现,Yahoo/Flickr在github上也有一个并行实现的pull request。什么时候并入caffe的master branch其实主要是人手的问题,大家都在忙于实现新的算法,没有太多精力处理代码库的问题… 我们在Berkeley目前也在寻求一位PostDoc来负责Caffe的日常维护和团队管理,在这里顺便做个广告。
  《程序员》:知乎上有一个问题:“做一个基于C++的物体识别系统,Caffe只提供了Matlab和Python的接口的,C++要怎么使用Caffe?希望能提供具体的配置(Linux下)和调用方法。”能否介绍Caffe在语言支持的选择方面是如何考虑的?对于广大的C++用户,您有什么建议?
  贾扬清:Caffe主要的代码其实都是C++的,所以C++比Python和Matlab更加容易集成一些。当然,因为C++本身的缘故,所以实现一些数据的预处理比Matlab和Python要更困难一些。对于C++的话,可能就是多读Caffe的源代码吧:) 另外Caffe的tutorial一般都有对应的样例代码,顺着这些样例找到相应的实现,可能比单纯从底层读代码会更容易一些。
  未来展望
  《程序员》:与深度学习的发展和应用相比,您对Caffe目前的整体开发进度的满意度如何?Caffe未来需要解决哪些问题、增加哪些特性或者做哪些方面的优化,能否从整体上介绍一下未来的研发计划?
  贾扬清:Caffe整体的开发进度还是非常令我感到惊讶的,特别是考虑到Caffe的核心成员只有五个人 - 我,Evan Shelhamer,Jon Long,Jeff Donahue和Sergio Guadarrama。每个人都有自己日常的科研和工程任务,但是同时我们还很好地保持了Caffe的维护和改进工作。最近我们正在做的工作主要是整合github上的各个pull request,包括多GPU计算、Python支持等等。
  我觉得我们在CVPR 2015上的tutorial基本上概括了Caffe最近或者正在增加的特性:http://tutorial.caffe.berkeleyvision.org/。当然,我们一如既往地公开了所有的细节,包括源程序和训练好的模型。目前我个人除了科研以外主要在做的是两方面的内容,一方面是继续开源Google最近在Deep Learning上的科研成果(比如说我参与的GoogLeNet),另一方面是重新设计Caffe的一些结构,使得它更模块化,更容易在各种环境下部署。
  《程序员》:现在很多云服务商都提供了机器学习云服务,Caffe基于云服务的优化是如何规划的?
  贾扬清:据我所知,目前很多机器学习的云服务都是基于简单的模型,比如说线性的Logistic Regression等等来提供的。最近有许多公司开始提供更加复杂的机器学习服务,比如说Microsoft Project Oxford等等,也许将来我们就可以很容易地使用深度学习的最新成果了。对于Caffe而言,我们更多地注重在深度学习的研究上面,所以对于云服务的优化并不是一个主要的方向。当然,我觉得Caffe的开发团队非常优秀,所以将来也许会走一条和工业界更加紧密联系的道路。《程序员》:是否因为架构或者设计的原因,使得Caffe会存在一些天生不擅长的深度学习场景?Caffe训练出来的模型和其他的框架产生的模型如何很好支持地转化?
  贾扬清:Caffe一开始主要是为了图像领域的应用所设计的,所以在非图像的问题,比如说一般的机器学习、语音识别等问题上,Caffe的框架并不一定是最优的。举个例子,我们最近对于Caffe的数据结构做了一些修改,但是那之前Caffe的数据都需要强制定义成四维的Tensor:显然,在很多应用当中这是不够灵活的。根据我们从开发者社区得到的反馈,在很多非图像的应用领域,包括语音、自然语言处理、金融数据处理等等,其实也有很多人在使用Caffe。我们最近也在继续修改Caffe的框架,希望在不同领域的应用能够更加方便。
  关于模型在不同框架之间转化的问题,我觉得我的回答是“与其用多个框架,不如优化一个框架” - 客观地说,Caffe在通用性和可移植性上比其他的框架(比如说基于Python的Theano和基于Lua的Torch)要灵活很多。Caffe的社区里面也有爱好者提供不同框架之间的转换代码,如果的确需要的话,可以搜索一下。
  《程序员》:目前大型互联网公司的深度学习系统都依赖于GPU加速,当然Caffe也支持无GPU模式,您如何看待非GPU加速的深度学习的前景?比如在FPGA加速或者未来基于神经网络芯片的系统,Caffe会如何支持?
  贾扬清:非GPU加速的深度学习目前而言还是有一定的优势的,因为如果计算GPU的成本,目前云端服务的价格还是很贵 - 这主要是因为GPU本身带来更多成本,比如前期投入以及后期的维护等等。GPU的更新换代也会导致投入和产出的平衡更加难以计算。如果深度学习被证明有着巨大的产品需求的话,我觉得FPGA以及ASIC这样的专用芯片会逐渐出现并且占据市场 - 毕竟在固定算法的前提下,它们在速度上和成本上都有着巨大的优势。
  在Caffe的支持上,我个人并不是非常担心,因为深度学习的模型都可以用比较通用的数学函数表达出来。举个例子,在没有GPU的时候,深度学习的算法都是在CPU上实现的;在GPU出现以后,模型还是一样的模型,但是速度得到了一个数量级的提高。我觉得FPGA也会一样,只要有芯片的产品以后,由Caffe(或者其他深度学习的框架)所训练的模型只需要相应的实现代码就可以重现。当然,软硬件的同步开发也是需要的。
  《程序员》:业界已经有人尝试深度学习在智能设备上的应用,芯片厂商在研究嵌入式视觉SoC,您自己也尝试过Raspberry Pi和Jetson,您如何看待嵌入式系统深度学习的趋势?在这方面Caffe还能够做些什么?
  贾扬清:嵌入式的深度学习应该是一个大的趋势 - 就像百度IDL的创始人余凯博士说的一样,“世界终归是属于做机器人的人”。从广义上来说,各种智能设备都可以归为机器人的范畴。目前而言深度学习的大部分算法还是基于云端的计算,但是随着最近几年计算能力飞速提高,很多算法已经可以在嵌入式芯片(比如说NVIDIA的Tegra K1)上实时地运行了。想象一下,如果我们身边的每一个设备,从汽车到冰箱都是智能的,这该是多么美好的一件事情!这样的想法其实很早以前就有了(我记得我读初中的时候就听说过微软的智能家居的计划),但是我觉得现在我们站在一个技术的拐点上,也许可以真正实现以前的这些梦想。
  从一定意义上说,希望深度学习在所有平台上都可以运行,这也是我最开始写Caffe的希望,也是为什么我选了C++而不是其他的语言。我目前正在修改一些Caffe的架构,希望能够更加容易地实现模块化的设计:核心Caffe代码是最小化和完全可移植的,然后可以根据需求来增加各种其他的模块。希望这样一来,Caffe的应用都能很高效地自定义到各种平台上面。
  《程序员》:最后,请谈谈您对Caffe在深度学习领域的未来有什么期待?
  贾扬清:用一句话来说,我希望Caffe能够成为机器学习和深度学习领域的Hadoop:人人了解,人人使用,人人获益。目前而言,深度学习领域的发展日新月异,各种框架发展非常迅猛,但是一定程度上也导致很多具体实现的碎片化。我个人的希望是通过不断改进Caffe本身的框架、代码、优化和周边各种支持,将Caffe变成一个业界标准的框架,提供一个相对普适的平台,让大家能更好地交流科研的成果,以及更快地将这些成果转化到实际的应用中去。
  作者简介:贾扬清,拥有加州大学伯克利分校计算机科学博士学位、清华大学硕士学位和学士学位,曾于新加坡国立大学、微软亚洲研究院、NEC美国实验室、Google研究院实习或工作,现就职于Google,从事机器视觉(Computer Vision)研究工作。
  责任编辑:周建丁()
  本文选自程序员电子版2015年7月A刊,该期更多文章请查看这里。2000年创刊至今所有文章目录请查看程序员封面秀。欢迎订阅程序员电子版(含iPad版、Android版、PDF版)。
  本文为《程序员》电子刊原创文章,如需转载请注明出处
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
中国最具影响力、最权威的IT专业技术期刊,是国内唯一一本定...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:

我要回帖

更多关于 caffe loss function 的文章

 

随机推荐