Caffe波胆是什么意思思

专注于机器学习
如何解读Caffe源码
如何解读Caffe源码
Caffe是现在非常流行的深度学习库,能够提供高效的深度学习训练。该库是用C++编写,能够使用CUDA调用GPU进行加速。但是caffe内置的工具不一定能够满足用户的所有需求,所以阅读源码并理解它,是很有必要的。
这篇博文不是想把Caffe的所有函数都讲一遍,因为Caffe的源码很大,一本书都不一定能够说清楚。这里我只是说说该怎么去阅读源码,给大家提供一个思路和建议,让大家能够快速把握caffe的整体,出了问题该往哪个方向去思考。
caffe的编译,网上已有很多教程,大家可以看看。
Caffe的文件组织方式
caffe-master
编译后的存放的目录
examples使用到的所有数据都放在这里了
这里有很多讲解caffe的文件,新手可以把这里的东西好好看看。.md文件推荐使用atom软件进行查看
这里是放例子的地方,可以借着这些例子好好理解下该怎么用caffe。特别是mnist
这里存放着caffe的所有头文件。阅读头文件可以让人很快地把握全局而不考虑具体实现
和 matcaffe有关的文件
这里有一些如何写deploy文件的示例,可以用在训练完成后发布你的模型
和pycaffe有关的文件都放在这里了。在python中使用caffe时,需要把该路径给加上
一些帮助使用caffe的脚本
头文件的实现都在这里
一些常用的工具的源代码,编译后的可执行文件在build/tools中
examples里面由好几个caffe的示例,打开mnist看下,里面由很多文件,我们先看readme.md。里面很好的讲解了如何运行这个模型,以及各个参数代表什么意思。读懂了这个的话,基本上你就会运行示例了。其他的示例也可以照这样学习。值得一提的是,学习这个部分时,可以结合docs里面的讲解,还有一些 *.ipynb。如何查看ipynb就不说了,自己查资料。
示例运行得差不多,你就可以琢磨下如何使用deploy文件了。
理解caffe源码
为了更好的阅读代码,我建议按如下步骤使用Eclipse打开caffe工程:
配置下java,因为Eclipse需要java环境
下载eclipse cpp版
打开Eclipse,在菜单栏File-&import-&c/c++-&Existing code as Autotools project,按next,然后在browse中找到caffe-master,进入caffe-master后按确认。
这样就导入了整个工程了,但是不要尝试使用Eclipse来编译caffe,因为基本上都编译不通过。
blob、layer、net、solver这几个是要好好阅读的(头文件以及实现),可以结合这docs里面的文件看。看懂了这几个文件,那么你基本上就大概知道caffe是如何运行的了。
但是你可能在运行示例时很纳闷,每个层那么多的参数,我该怎么知道它是什么意思。别担心,所有的这些信息都可以在src/caffe/proto/caffe.proto中找到。看不懂的话,可以查一下protobuf的使用。
上面的如果都看懂了,那就可以好好研究下src/caffe/layers里面的文件了,把mnist用到的那些层好好看看它是怎么实现的,可以先看cpp,有cuda基础的就看看cu。
添加自己的层
添加自己的caffe层需要有一定的c++基础,至少要明白什么是继承,什么是虚函数,以及多线程的基本概念。可以选择继承一个和自己功能最相近又满足继承关系的层。
具体的步骤可以参考下博文。
使用pycaffe
使用pycaffe的话,我推荐使用cmake而不是直接的make编译工程,因为现在的版本中make后的pycaffe经常出现找不到链接库。
现在是看*.ipynb文件的时候了,里面详细讲解了如何使用caffe的python接口。出现问题的话就看源代码。建议使用pycharm或者Eclipse Java版。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Caffe是一个深度学习框架,具有表达力强、速度快和模块化的思想,由伯克利视觉学习中心(BVLC)和社区贡献者开发。Yangqing Jia在加州大学伯克利分校攻读博士期间创建了这个项目。
为什么选择Caffe?
富有表现力的架构鼓励应用和创新。使用Caffe,可以在配置中定义模型和优化,不需要硬编码。通过设置一个GPU机器训练标记在CPU和GPU之间转换,接着调配商品化集群系统或移动设备来完成。
代码的可扩展性让开发更加活跃。在Caffe项目的第一年,它就被开发者fork超过1000次,由他们完成许多重要的修改并反馈回来。多亏那些贡献者,这个框架在代码和模型两方面都在追踪最先进的技术。
速度使Caffe完美的用于研究实验和工业开发。使用一个NVIDIA K40 GPU Caffe每天可以处理超过60M的图像。推理过程为1ms/一幅图像,而学习过程为4ms/一幅图像。我们相信Caffe是现在可使用最快的ConvNet应用。
社区:在视觉、速度和多媒体方面,Caffe已经有能力用于学术研究项目、启动原型,甚至大规模的工业应用。
在安装之前,看一下这个手册,记录下平台的一些细节。我们可以在Ubuntu 16.04-12.04、OS X10.11-10.8上通过Docker和AWS安装和运行Caffe。官方的编译脚本和Makefile.config编译由社区CMake编译补全。
逐步介绍:
开包即用计划
使用单个命令安装caffe
请参阅由Guillaume Dumont领导的Windows分支
请参阅由Fabian Tschopp领导的OpenCL分支
预配置为AWS
Caffe有几个依赖项:
是GPU模式所需要的。
推荐使用库版本7+和最新的驱动版本,但是6.*也可以。
5.5和5.0兼容但是被认为是过时的。
通过ATLAS、MKL或OpenBLAS使用。
Protobuf、glog、gflags、hdf5
可选依赖项:
&=2.4 包括3.0
IO库:lmdb、leveldb(注意:leveldb需要snappy)
CuDNN用于GPU加速(v5)
Pycaffe和Matcaffe接口有它们自己的需求。
对于Python Caffe:Python 2.7或Python 3.3+,numpy(&=1.7),boost条件下为boost.python
对于MATLAB Caffe:带有mex编译器的MATLAB。
cuDNN Caffe:为了达到最快的运行速度,Caffe通过插入式集成NVIDIA cuDNN来加速。为了提升你的Caffe模型的速度,安装cuDNN,然后安装Caffe时在Makefile.config中取消注释USE_CUDNN:=1标记。Caffe会自动进行加速。当前版本是cuDNN v5;在旧版Caffe中支持旧版本。
CPU-only Caffe:对于cold-brewed只有CPU模式的Caffe,在Makefile.config中取消注释CUP_ONLY :=1标记,配置和生成没有CUDA的Caffe。这对于云或者集中配置非常有帮助。
CUDA和BLAS
Caffe需要CUDA nvcc编译器编译它的GPU代码和用于GPU操作的CUDA驱动器。可以去网站,按照那里的安装说明安装CUDA。分别安装库和最新的独立驱动器;驱动器和库捆绑在一起通常是过时的。警告!331.*CUDA驱动器序列有严重的性能问题,不要使用它。
为获得最佳性能,Caffe可以通过加速。在cuDNN网站上免费注册、安装,然后继续根据安装说明操作。编译cuDNN时在你的Makefile.config中设置USE_CUDNN :=1标记。
Caffe需要BLAS作为它的矩阵和向量计算的后端。有几个这个库的实现工具。你可以选择:
:免费、开源、默认用于Caffe。
:商业的,针对Intel CPUs进行了优化,可以免费试用,也可以获得。
设置MKL环境变量(细节:,)。例如:source /opt/intel/mkl/bin/mklvars.sh intel64
在Makefile.config中设置BLAS := mkl
:免费并开源;安装这个优化的并行的BLAS需要更多的工作量,虽然它可能提供加速。
安装OpenBLAS
在config中设置BLAS :=open
Python 和 MATLAB Caffe(可选)
主要依赖numpy和boost.python(由boost提供)。Pandas也很有用,而且一些例子中需要它。
你可以使用下面的命令安装依赖项。
for req in $(cat requirements.txt); do pip install $ done
<div class="crayon-num" data-line="crayon-5b2ec
for req in $(cat requirements.txt); do pip install $req; done
但是,建议先安装Anaconda Python发行包,它可以提供大多数必需的包和hdf5库依赖项。
在安装结束后导入caffe Python模块,通过诸如export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH添加模块目录到你的$PYTHONPATH。不应该在caffe/python/caffe目录中导入模块。
Caffe&#8217;s Python接口在Python2.7中工作。Python3.3+应该立即可以使用,不需要protobuf支持。对于protobuf支持请安装protobuf 3.0 alpha (https://developers.google.com/protocol-buffers/)。早期版本的Python需要自行探索安装方法。
安装MATLAB,确保$PATH中已加入mex。
Caffe的MATLAB接口可以在版本2015a、2014a/b、2013a/b和2012b中工作。
Caffe可以使用Make或CMake编译。Make是官方支持,CMake由社区支持。
使用Make编译
通过复制和修改示例Makefile.config为安装配置生成文件。默认值应该可以工作,但是如果使用Anaconda Python,要取消注释对应的代码行。
cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make runtest
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec
cp Makefile.config.example Makefile.config# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)make allmake testmake runtest
对于CPU&GPU加速的Caffe,不需要改变。
对于使用NVIDIA私有的cuDNN软件的cuDNN加速器,取消注释Makefile.config中的USE_CUDNN :=1。cuDNN有时比Caffe的GPU加速器速度快,但不是一贯如此。
对于只有CPU的Caffe,取消注释Makefile.config中的CPU_ONLY :=1。
为了编译Python和MATLAB包装类,分别执行make pycaffe和make matcaffe。确保先在Makefile.config中设置你的MATLAB和Python路径。
分配:运行make distribute,创建一个带有所有Caffe头文件的distribute目录,编译库、二进制文件等。为分配到其他机器所需。
速度:为了快速的生成,通过运行make all –j8并行编译,其中8是并行编译线程的数量(线程数量最好选择机器内核的数量)。
安装好Caffe后,检查教程和模型教程。
在手动编辑Makefile.config的地方配置编译文件,Caffe提供一个非官方的CMake编译,感谢一些社区成员。需要CMAke版本&=2.8.7。基本步骤如下所示:
mkdir build
make install
make runtest
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec
mkdir buildcd buildcmake ..make allmake installmake runtest
更多细节参见:
ImageNet训练网络
这个教程是为了让你准备好使用自己的数据训练自己的模型。如果你想要一个ImageNet训练网络,那么请注意训练会消耗大量的能源,而我们讨厌全球变暖,所以我们提供CaffeNet模型作为下面model zoo中的训练模型。
本文指出所有的路径,并假设所有的命令在caffe根目录执行。
ImageNet,我们这里的意思是ILSVRC12挑战赛,但是你可以轻松训练整个ImageNet,只是需要更多的磁盘控件和稍微多一点的训练时间。
我们假设你已经下载了ImageNet训练数据和验证数据,它们存储在你的磁盘中如下位置:
/path/to/imagenet/train/n26.JPEG
/path/to/imagenet/val/ILSVRC2012_val_.JPEG
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec
/path/to/imagenet/train/n/n26.JPEG/path/to/imagenet/val/ILSVRC2012_val_.JPEG
首先,你需要准备一些用于训练的辅助数据。这些数据可以这样下载。
./data/ilsvrc12/get_ilsvrc_aux.sh
./data/ilsvrc12/get_ilsvrc_aux.sh
训练和验证输入数据分别为train.txt和val.txt,使用文本文件列出所有文件和它们的标签。注意我们对标签使用同ILSVRC devkit不同的索引:我们按照ASCII码排序这些同义词组的名字,从0到999标记它们。在synset_works.txt中查看同义词组和名字的映射。
你可能想要预先调整图像的大小为256*256。默认情况下,我们不需要显示的做这个,因为在集群环境中,一个好处是可以并行调整图像大小,并使用分布式编程环境。例如,Yangqing使用他的轻量级包。如果你想要事情更简单,你也可以像这样使用shell命令:
for name in /path/to/imagenet/val/*.JPEG; do
convert -resize 256x256\! $name $name
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec
for name in /path/to/imagenet/val/*.JPEG; do
convert -resize 256x256\! $name $namedone
看一下examples/imagenet/create_imagenet.sh。根据需要设置路径为训练和验证目录,同时设置“RESIZE=true”调整所有图像的大小为256*256,如果你没有提前调整图像。现在只使用examples/imagenet/create_imagenet.sh创建leveldbs。注意,examples/imagenet/ilsvrc12_train_leveldb和examples/imagenet/ilsvrc12_val_leveldb不应该在执行前存在。它由脚本创建。GLOG_logtostderr=1仅仅传送更多的信息给你观察,你可以安全地忽视它。
计算图像平均值
模型需要我们从每幅图像中减去图像平均值,所以我们必须计算平均值。tools/compute_image_mean.cpp完成这些,它也是一个熟悉怎样操纵多个组件很好的例子,例如协议缓存、leveldbs和登录,如果你不熟悉它们的话。总之,平均值计算可以这样做:
./examples/imagenet/make_imagenet_mean.sh
<div class="crayon-num" data-line="crayon-5b2ec
./examples/imagenet/make_imagenet_mean.sh
结果会生成data/ilsvrc12/imagenet_mean.binaryproto.
我们将描述Krizhevsky、Sutskever和Hinton在 的文章中第一次提出这个方法的参考实例。
网络定义(models/bvlc_reference_caffenet/train_val.prototxt)遵循Krizhevsky等人的定义。注意,如果偏离了本文建议的文件路径,你需要在.prototxt文件中调整相关路径。
如果你认真看了models/bvlc_reference_caffenet/train_val.prototxt,你会注意到几个指定phase: TRAIN或phase: TEST的include部分。这部分允许我们在一个文件中定义两个非常相关的网络:一个网络用于训练,另一个网络用于测试。这两个网络几乎是相同的,分享所有的层,除了那些标记为include { phase: TRAIN } 或 include { phase: TEST }的层。在这种情况下,只有输入层和一个输出层是不同的。
输入层的不同:训练网络数据的输入层从examples/imagenet/ilsvrc12_train_leveldb中提取数据,随机的映射到输入图像。测试网络的数据层从examples/imagenet/ilsvrc12_val_leveldb中获得数据,不执行随机映射。
输出层的不同:两个网络都输出softmax_loss层,它在训练网络中用于计算损失函数,并初始化反向传播算法,而在验证过程只是简单的报告这个损失。测试网络还有第二个输出层,accuracy,它用于报告测试集的准确度。在训练过程,测试网络偶尔在测试集上被实例化并测试,产生代码行如Test score #0: xxx 和 Test score #1: xxx。在这里score0是准确度(对于未训练的网络将从1/开始),score1是损失(对于未训练的网络将从7附近开始)。
我们也将设计一个协议缓存用于运行求解。让我们做几个计划:
我们将以256个为一组,运行总共450000次迭代(大约90个最大训练次数)。
每1000次迭代,我们使用验证数据测试学习网络。
我们设置初始学习速率为0.01,每100000次迭代后减小它(大概20个最大训练次数)。
每20个迭代显示一次信息。
这个训练网络的动量为0.9,权重衰减为0.0005.
每10000次迭代,我们会简要说明当前状态。
听起来不错吧?这是在models/bvlc_reference_caffenet/solver.prototxt.中完成的。
训练ImageNet
准备好了吗?我们开始训练。
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt
<div class="crayon-num" data-line="crayon-5b2ec
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt
在一个K40机器上,每20次迭代大概需要运行26.5秒(在K20上为36秒),所以实际上每幅图像完成完全前后向移动采集数据为5.2ms。大概2ms向前,其余时间向后。如果你对仔细分析计算时间感兴趣,你可以运行
./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt
./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt
继续训练?
我们都经历过停电,或者我们想要稍微奖励自己一下,玩一会儿Battlefield(还有人记得Quake吗?)。因为我们在训练时截取中间结果,所以我们可以从截图位置继续训练。这可以很容易的完成,像这样:
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt —
snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt —snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
其中脚本caffenet_train_iter_10000.solverstate是存储所有所需信息的求解状态简介,可以用来恢复为准确的求解状态(包括参数、动量历史等)。
因为你有了已训练网络,查看怎样使用Python接口。
分类ImageNet:使用C++接口
Caffe,它的内核是用C++写的。可以使用Caffe的C++接口去完成类似上个例子中Python代码展示的图像分类应用。为了查看Caffe C++ API更通用的示例,你应该学习tools/caffe.cpp中的命令行工具caffe的源代码。
文件examples/cpp_classification/classification.cpp给出了简单的C++代码。为了简单起见,这个例子不支持单一样本过采样,也不支持多个独立样本的批处理。这个例子不是试图达到系统吞吐量的最大可能分类,而是特别注意在保持代码可读性的同时避免不必要的劣化。
这个C++示例是在编译Caffe时自动生成。遵循文档说明编译Caffe,在build目录中这个分类示例被生成为examples/classification.bin。
想要使用预先训练的CaffeNet模型分类示例,需要先从“Model Zoo”中下载。使用脚本:
./scripts/download_model_binary.py models/bvlc_reference_caffenet
<div class="crayon-num" data-line="crayon-5b2ec
./scripts/download_model_binary.py models/bvlc_reference_caffenet
ImageNet标签文件(也叫同义词组文件)也是需要的,用于将预测类别映射到类别名:
./data/ilsvrc12/get_ilsvrc_aux.sh
<div class="crayon-num" data-line="crayon-5b2ec
./data/ilsvrc12/get_ilsvrc_aux.sh
使用这些下载的文件,我们可以分类预先准备的猫图像(examples/images/cat.jpg),使用命令:
./build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt \
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
data/ilsvrc12/imagenet_mean.binaryproto \
data/ilsvrc12/synset_words.txt \
examples/images/cat.jpg
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec
./build/examples/cpp_classification/classification.bin \ models/bvlc_reference_caffenet/deploy.prototxt \ models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \ data/ilsvrc12/imagenet_mean.binaryproto \ data/ilsvrc12/synset_words.txt \ examples/images/cat.jpg
输出应该是:
---------- Prediction for examples/images/cat.jpg ----------
0.3134 - "n tabby, tabby cat"
0.2380 - "n tiger cat"
0.1235 - "n Egyptian cat"
0.1003 - "n red fox, Vulpes vulpes"
0.0715 - "n lynx, catamount"
<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec<div class="crayon-num crayon-striped-num" data-line="crayon-5b2ec<div class="crayon-num" data-line="crayon-5b2ec
---------- Prediction for examples/images/cat.jpg ----------&0.3134 - "n tabby, tabby cat"&0.2380 - "n tiger cat"&0.1235 - "n Egyptian cat"&0.1003 - "n red fox, Vulpes vulpes"&0.0715 - "n lynx, catamount"
为了进一步提高性能,你需要更多的利用GPU,这里是一些准则:
尽早将数据转移到GPU上,在这里完成所有的预处理操作。
如果你同时分类许多图像,应该使用批处理(许多独立图像在一次运行中被分类)。
使用多线程分类确保GPU被充分利用,不要等待I/O阻塞CPU线程。
资源整理者简介:
学习了,想学习机器学习,但是还知道怎么入门,书上很多一上来就是数学!
按分类快速查找
关于资源导航
伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
关于资源导航
伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。
新浪微博:
推荐微信号
(加好友请注明来意)
- 好的话题、有启发的回复、值得信赖的圈子
- 分享和发现有价值的内容与观点
- 为IT单身男女服务的征婚传播平台
- 优秀的工具资源导航
- 翻译传播优秀的外文文章
- 国内外的精选博客文章
- UI,网页,交互和用户体验
- 专注iOS技术分享
- 专注Android技术分享
- JavaScript, HTML5, CSS
- 专注Java技术分享
- 专注Python技术分享
& 2018 伯乐在线home&#47;xxx&#47;caffe&#47;是什么意思_百度知道
home&#47;xxx&#47;caffe&#47;是什么意思
我有更好的答案
home英-[h&#601;&#650;m]美-[hom]释义n. 家,住宅;产地;家乡;避难所adj. 国内的,家庭的;有效的vt. 归巢,回家adv. 在家,回家;深入地caffe释义n. (意)咖啡n. (Caffe)人名;(罗)卡费
采纳率:90%
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。& & & & 通过前面的学习,我们已经能够正常训练各种数据了。设置好solver.prototxt后,我们可以把训练好的模型保存起来,如lenet_iter_10000.caffemodel。 训练多少次就自动保存一下,这个是通过snapshot进行设置的,保存文件的路径及文件名前缀是由snapshot_prefix来设定的。这个文件里面存放的就是各层的参数,即net.params,里面没有数据(net.blobs)。顺带还生成了一个相应的solverstate文件,这个和caffemodel差不多,但它多了一些数据,如模型名称、当前迭代次数等。两者的功能不一样,训练完后保存起来的caffemodel,是在测试阶段用来分类的,而solverstate是用来恢复训练的,防止意外终止而保存的快照(有点像断点续传的感觉)。
既然我们知道了caffemodel里面保存的就是模型各层的参数,因此我们可以把这些参数提取出来,进行可视化,看一看究竟长什么样。
我们先训练cifar10数据(mnist也可以),迭代10000次,然后将训练好的 model保存起来,名称为my_iter_10000.caffemodel,然后使用jupyter notebook 来进行可视化。
在此顺便问一下各位大牛:如何在cnblogs中,发表jupyter notebook生成的文章?
&      首先,导入必要的库
import numpy as np
import matplotlib.pyplot as plt
import os,sys,caffe
%matplotlib inline
caffe_root='/home/lee/caffe/'
os.chdir(caffe_root)
sys.path.insert(0,caffe_root+'python')
plt.rcParams['figure.figsize'] = (8, 8)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
&      设置网络模型,并显示该模型中各层名称和参数的规模(注意此处是net.params, 而不是net.blobs)
net = caffe.Net(caffe_root + 'examples/cifar10/cifar10_full.prototxt',
caffe_root + 'examples/cifar10/my_iter_10000.caffemodel',
caffe.TEST)
[(k, v[0].data.shape) for k, v in net.params.items()]
[('conv1', (32, 3, 5, 5)),
('conv2', (32, 32, 5, 5)),
('conv3', (64, 32, 5, 5)),
('ip1', (10, 1024))]
&        cifar10训练的模型配置在文件cifar10_full.prototxt里面,共有三个卷积层和一个全连接层,参数规模如上所示。
#编写一个函数,用于显示各层的参数def show_feature(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# force the number of filters to be square
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# tile the filters into an image
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
plt.imshow(data)
plt.axis('off')
# 第一个卷积层,参数规模为(32,3,5,5),即32个5*5的3通道filter
weight = net.params["conv1"][0].data
print weight.shape
show_feature(weight.transpose(0, 2, 3, 1))
(32, 3, 5, 5)参数有两种类型:权值参数和偏置项。分别用params["conv1"][0] 和params["conv1"][1] 表示 。我们只显示权值参数,因此用params["conv1"][0]&
# 第二个卷积层的权值参数,共有32*32个filter,每个filter大小为5*5
weight = net.params["conv2"][0].data
print weight.shape
show_feature(weight.reshape(32**2, 5, 5))
(32, 32, 5, 5)
# 第三个卷积层的权值,共有64*32个filter,每个filter大小为5*5,取其前1024个进行可视化
weight = net.params["conv3"][0].data print weight.shape show_feature(weight.reshape(64*32, 5, 5)[:1024])
(64, 32, 5, 5)
阅读(...) 评论()}

我要回帖

更多关于 让一球胜是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信