ImageVerifierCode 换一换
格式:PDF , 页数:36 ,大小:2.47MB ,
资源ID:6042784      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6042784.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(caffe学习笔记1-7-完整版-薛开宇.pdf)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

caffe学习笔记1-7-完整版-薛开宇.pdf

1、读书笔记 1 CIFAR-10在 caffe上进行训练与学习 2014.7.21薛开宇 本次学习笔记作用,知道如何在 caffe上训练与学习,如何看结果。 1.1使用数据库: CIFAR-10 60000张 32X32 彩色图像 10类 50000张训练 10000张测试 1.2准备 在终端运行以下指令: cd $CAFFE_ROOT/data/cifar10 ./get_cifar10.sh cd $CAFFE_ROOT/examples/cifar10 ./create_cifar10.sh 其中 CAFFE_ROOT是 caffe-master在你机子的地址 运行之后,将会在 examp

2、les 中出现数据库文件 ./cifar10-leveldb 和数据库图像均值二进制文件 ./mean.binaryproto 1.3模型 该 CNN由卷积层, POOLing层,非线性变换层,在顶端的局部对比归一化线性分类器组成。该模型的定义在 CAFFE_ROOT/examples/cifar10 directory s cifar10_quick_train.prototxt中,可以进行修改。其实后缀为 prototxt很多都是用来修 改配置的。 1.4训练和测试 训练这个模型非常简单,当我们写好参数设置的文件 cifar10_quick_solver.prototxt 和定义的文件 c

3、ifar10_quick_train.prototxt 和 cifar10_quick_test.prototxt 后,运行 train_quick.sh 或者在终端输入下面的命令: cd $CAFFE_ROOT/examples/cifar10 ./train_quick.sh 即可, train_quick.sh 是一个简单的脚本,会把执行的信息显示出来,培训的工具是train_net.bin,cifar10_quick_solver.prototxt作为参数。 然后出现类似以下的信息: I0317 21:52:48.945710 2008298256 net.cpp:74 Creatin

4、g Layer conv1 I0317 21:52:48.945716 2008298256 net.cpp:84 conv1 conv1 I0317 21:52:49.298691 2008298256 net.cpp:125 Top shape: 100 32 32 32 (3276800) I0317 21:52:49.298719 2008298256 net.cpp:151 conv1 needs backward computation. 这是搭建模型 的相关信息 接着: 0317 21:52:49.309370 2008298256 net.cpp:166 Network ini

5、tialization done. I0317 21:52:49.309376 2008298256 net.cpp:167 Memory required for Data 23790808 I0317 21:52:49.309422 2008298256 solver.cpp:36 Solver scaffolding done. I0317 21:52:49.309447 2008298256 solver.cpp:47 Solving CIFAR10_quick_train 之后,训练开始 I0317 21:53:12.179772 2008298256 solver.cpp:208

6、Iteration 100, lr = 0.001 I0317 21:53:12.185698 2008298256 solver.cpp:65 Iteration 100, loss = 1.73643 . I0317 21:54:41.150030 2008298256 solver.cpp:87 Iteration 500, Testing net I0317 21:54:47.129461 2008298256 solver.cpp:114 Test score #0: 0.5504 I0317 21:54:47.129500 2008298256 solver.cpp:114 Tes

7、t score #1: 1.27805 其中每 100 次迭代次数显示一次训练时 lr(learning rate),和 loss(训练损失函数),每 500 次测试一次,输出 score 0(准确率) 和 score 1(测试损失函数) 当 5000次迭代之后,正确率约为 75%,模型的参数存储在二进制 protobuf格式在 cifar10_quick_iter_5000 然后,这个模型就可 以用来运行在新数据上了。 1.5 其他 另外,更改 cifar*solver.prototxt文件可以使用 CPU训练, # solver mode: CPU or GPU solver_mode:

8、CPU 可以看看 CPU和 GPU训练的差别。 主要资料来源: caffe官网教程 读书笔记 2 用一个预训练模型提取特征 2014.7.21薛开宇 本 学习笔记 的作用在于为后面打基础,没有什么实际的东西可以观测到,要可视化特征还要观看后面的教程。 2.1 制作一个数据库 先做一个临时文件夹存放东西。 mkdir examples/_temp 我们为 两 张在 images 文件夹的照片生成一个文件列表 (默认为一张图片, cat1 是我随意加上去的) find pwd/examples/images -type f -exec echo ; examples/_temp/temp.txt

9、我们将使用 imagedatalayer预计标签之后的每一个文件名,所以让我们添加一个 0到每一行的末尾 sed “s/$/ 0/“ examples/_temp/temp.txt examples/_temp/file_list.txt 这样,我们将得到两个文件 temp.txt和 file_list.txt。 2.2.定义特征提取网络结构 在实践中,从一个数据集中减去均值图像对于提高分类准确性很重要,因此从 ILSVRC dataset中下载均值图像数据库 data/ilsvrc12/get_ilsvrc_aux.sh 我们将使用其中的 data/ilsvrc212/imagenet_me

10、an.binaryproto去定义网络结构。 将定义结构的文件 cope到我们的临时文件夹。 cp examples/feature_extraction/imagenet_val.prototxt examples/_temp 然后,我们进入 imagenet_val.prototxt更改路径。更改其中 $CAFFE_DIR的地方 下图是我做的改动。 2.3.提取特征 执行指令 build/tools/extract_features.bin examples/imagenet/caffe_reference_imagenet_model examples/_temp/imagenet_va

11、l.prototxt fc7 examples/_temp/features 10 其中 fc7是最高层的特征,我们也可以使用其他层提取,像 conv5或 pool3 最后的参数是数据的批次 特征保存在 LevelDB examples/_temp/features ,可以运用到其他代码了。 这里可以发现,特征文件中 5个文件和 cifar10中的 leveldb是相似的。 _temp下 features Cifar10下特征数据库 因此,这是我们训练时组建模型时必要的文件。 2.4.注意 当存在 features文件夹时将出现错误,这时需要移除该文件夹。 资料来源 : caffe官网教程 学

12、习笔记 3 用自己的数据训练和测试 “CaffeNet” 2014.7.22 薛开宇 本次学习笔记作用 比较大 , 也是重点, 知道如何在 caffe上 搭建自己的数据库。 3.1数据准备 本学习笔记有点脱离了原文,原文是用 ImageNet1000 类的数据库,而因为电脑内存不足,只能自己模仿做一个小的数据库进行下去。 本来教程是假设已经下载了 ImageNet 训练数据和验证数据 (非常大),并以下面的格式存储在磁盘: /path/to/imagenet/train/n01440764/n01440764_10026.JPEG /path/to/imagenet/val/ILSVRC201

13、2_val_00000001.JPEG 里面是各种的分类图。 因为实在太大,所以我们改为模仿搭建自己的数据库。 在 data 中新建文件夹 myself,本人在网上下载了训练猫的图片 50 张,测试猫 10 张,训练鸟的图片 50张,测试鸟 10张。如图所示: 如果坚持用 Imagenet的话, 我们还需要一些标签数据进行训练,用以下指令可以下载,如果不用,就可以不执行下面指令。 cd $CAFFE_ROOT/data/ilsvrc12/ ./get_ilsvrc_aux.sh 培训和测试的输入是用 train.txt和 val.txt描述的,这些文档列出所有文件和他们的标签。注意,我们分类的

14、名字是 ASCII 码的顺序,即 0-999,对应的分类名和数字的映射在synset_words.txt(自己写)中。 运行以下指令: find -name *.jpeg |cut -d / -f2-3 train.txt 注意路径 然后,因为样本数比较少,可以自行手动做分类标签。在 train.txt的每个照片后用 0-999分类。当样本过多,就自己编写指令批量处理。 同理, 获得 val.txt Test.txt和 val.txt一样,不过后面不能标签,全部设置成 0。 我们还需要把图片的大小变成 256X256,但在一个集群环境,可以不明确的进行,使用Mapreduce就可以了,像杨青就

15、是这样做的。如果我们希望更简单,用下面的命令: for name in /path/to/imagenet/val/*.JPEG; do convert -resize 256x256! $name $name done 我做成了 sh,方便以后使用。 然后在 caffe-master创建 myself文件夹,然后将 imagenet的 create_imagenet.sh. 复制到该文件夹下进行修改,进行训练和测试路径的设置,运行该 sh. 最后得到 3.2 计算图像均值 模型需要我们从每张图片减去均值,所以我们必须获得训练的均值,用 tools/compute_image_mean.cpp

16、实现,这个 cpp是一个很好的例子去熟悉如何操作多个组建,例如协议的缓冲区, leveldbs,登录等。我们可以直接复制 imagenet的 ./make_imagenet_mean.加 以修改应用就行 ,注意路径。 3.3网络的定义 从 imagenet中复制修改 imagenet_train.prototxt,注意修改数据层的路径。 source: “ilvsrc12_train_leveldb“ mean_file: “/data/ilsvrc12/imagenet_mean.binaryproto“ 我改成 同理,复制修改 imagenet_val.prototxt. 改成 如果你细心

17、观察 imagenet_train.prototxt and imagenet_val.prototxt,你会发现他们除了数据来源不同和最后一层不同,其他基本相同。在训练中,我们用一个 softmax loss 层计算损失函数和初始化反向传播,而在验证,我们使用精度层检测我们的精度。 我们还有一个运行的协议 imagenet_train.prototxt,复制过来,从里面可以观察到,我们将运行 256批次,迭代 4500000次( 90期),每 1000次迭代,我们测试学习网络验证数据,我们设置初始的学习率为 0.01,每 100000( 20期)次迭代减少学习率,显示一次信息,训练的 wei

18、ght_decay为 0.0005,每 10000次迭代,我们显示一下当前状态。 以上是教程的,实际上,以上需要耗费很长时间,因此,我们稍微改一下 test_iter: 1000是指测试的批次,我们就 10张照片,设置 10就可以了。 test_interval: 1000是指每 1000次迭代测试一次,我们改成 500次测试一次。 base_lr: 0.01是基础学习率,因为数据量小, 0.01就会下降太快了,因此改成 0.001 lr_policy: “step“学习率变化 gamma: 0.1学习率变化的比率 stepsize: 100000 每 100000次迭代减少学习率 displ

19、ay: 20 每 20层显示一次 max_iter: 450000 最大迭代次数, momentum: 0.9 学习的参数,不用变 weight_decay: 0.0005学习的参数,不用变 snapshot: 10000 每迭代 10000次显示状态,这里改为 2000次 solver_mode: GPU 末尾加一行,代表用 GPU进行 3.4 训练 把 ./train_imagenet.sh 复制过来运行,然后就像学习笔记 1 一样训练了,当然 ,只有两类,正确率还是相当的高。 3.5 恢复数据 我们用指令 ./resume_training.sh即可。 3.6 网上一些有趣的做法: ht

20、tp:/ 用 caffe自己做衣服识别,两类,条纹衣服和纯色衣服。 条纹衣服的原图和特征图 纯色衣服和特征图: 看条纹衣服的特征图比较有意思,把“条纹 ”特征给抽取出来了。也许这就是神经网络神奇的地方,在没有人的干扰的情况下,竟然能学习出来“条纹”特征。 3.7 该文章总结的做样本库的注意事项: 1 数据集要保证质量。曾经玩过一字领和 polo 领的分类,刚开始效果很差,后来发现有一些“错误”的标签,于是把那些样本给去掉。效果好了很多。 2 learning rate要调整。有一次训练了很久,准确率几乎不变,于是我减少了 lr,发现好了很多。 这点深有同感,可以尝试把学习率调回 0.01,保证

21、小数据不能超过 50的识别。 3 均值化图片。实践证明,均值化后再训 练收敛速度更快,准确率更高。 3.8 我们能做什么? 1 对于哪些数据集,深度学习比较适合? 2 对于效果差的数据集,如何能提高准确率? 主要资料来源: caffe官网的教程 读书笔记 4学习搭建自己的网络 MNIST在 caffe上进行训练与学习 2014.7.22 薛开宇 本次学习笔记作用也是比较重要,知道如何在 caffe上搭建自己的训练网络。 1.1准备 数据库: MNIST手写字体库 运行以下指令下载: cd $CAFFE_ROOT/data/mnist ./get_mnist.sh cd $CAFFE_ROOT/

22、examples/mnist ./create_mnist.sh 运行之后,会有 mnist-train-leveldb和 mnist-test-leveldb.文件夹 1.2 训练模型的解释 在我们训练之前,我们解释一下将会发生什么,我们将使用 LeNet的训练网络,这是一个被认为在数字分类任务中运行很好的网络,我们会运用一个和原始版本稍微不同的版本,这次用 ReLU(线性纠正函数)取代 sigmoid函数去激活神经元 这次设计包含 CNNs 的精髓,即像训练 imageNet 那样也是运用较大的训练模型。一般来说,由一层卷基层后跟着池层,然后再是卷基层,最后两个全连接层开诶死于传统的多层感

23、知器,我们在 CAFFE_ROOT/data/lenet.prototxt.中已经定义了层 1.3定义 MNIST训练网 络 这部分介绍如何使用 lenet_train.prototxt,我们假设您已经熟悉 Google Protobuf(主要作用是 把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等场合。 ),同时假设已经阅读了 caffe中的 protobuf定义(可以在 src/caffe/proto/caffe.proto.找到) 这个文档可以在我们建立自己的网络时,方便我们查到我们需要的格式。 我们将尝试写一个 caffe网络参数 protubuf,先观察一下

24、传统的网络 ,但实际上 caffe上的对这个网络有点 改变,例如 C1层是 20个 feature maps,第 C3层是 50个, C5层是 500个,没有 F6 层,直接是 OUTPUT层。 首先是命名: name: “LeNet“ 写入数据层,首先,我们需要先观察一下数据,之后,将定义一个数据层: 注释如下: layers # 输入层的名字为 mnist name: “mnist“ # 输入的类型为 DATA type: DATA # 数据的参数 data_param # 从 mnist-train-leveldb中读入数据 source: “mnist-train-leveldb“ #

25、 我们的批次大小为 64,即为了提高性能,一次处理 64条数据 batch_size: 64 # 我们需要把输入像素灰度归一到【 0, 1),将 1处以 256,得到 0.00390625。 scale: 0.00390625 # 然后这层后面连接 data和 label Blob空间 top: “data“ top: “label“ 然后是卷积层: layers # 卷积层名字为 conv1 name: “conv1“ # 类型为卷积 type: CONVOLUTION # 这层前面使用 data,后面生成 conv1 的 Blob空间 bottom: “data“ top: “conv1“

26、 # 学习率调整的参数,我们设置权重学习率和运行中求解器给出的学习率一样,同时是偏置#学习率的两倍, blobs_lr: 1 blobs_lr: 2 # 卷积层的参数 convolution_param # 输出单元数 20 num_output: 20 # 卷积核的大小为 5*5 kernel_size: 5 # 步长为 1 stride: 1 # 网络允许我们用随机值初始化权重和偏置值。 weight_filler # 使用 xavier算法自动确定基于输入和输出神经元数量的初始规模 type: “xavier“ bias_filler # 偏置值初始化为常数,默认为 0 type: “c

27、onstant“ 然后是 pooling层: layers #pooling层名字叫 pool1 name: “pool1“ #类型是 pooling type: POOLING #这层前面使用 conv1,后面生层 pool1的 Blob空间 bottom: “conv1“ top: “pool1“ #pooling层的参数 pooling_param #pooling的方式是 MAX pool: MAX #pooling的核是 2X2 kernel_size: 2 #pooling的步长是 2 stride: 2 然后是第二个卷积层,和前面没什么不同,不过这里用了 50个卷积核,前面是 2

28、0个 。 layers # 卷积层的名字是 conv2 name: “conv2“ # 类型是卷积 type: CONVOLUTION # 这层前面使用 pool1,后面生层 conv2的 Blob空间 bottom: “pool1“ top: “conv2“ blobs_lr: 1 blobs_lr: 2 convolution_param # 输出频道数 50 num_output: 50 kernel_size: 5 stride: 1 weight_filler type: “xavier“ bias_filler type: “constant“ 然后是第二个 pooling层,和前

29、面的没什么不同。 layers name: “pool2“ type: POOLING bottom: “conv2“ top: “pool2“ pooling_param pool: MAX kernel_size: 2 stride: 2 然后是全连接层,在某些特殊原因下看成卷积层,因此结构差不多。 layers # 全连接层的名字 name: “ip1“ # 类型是全连接层 type: INNER_PRODUCT blobs_lr: 1. blobs_lr: 2. # 全连接层的参数 inner_product_param #输出 500个节点,据说在一定范围内这里节点越多,正确率越高。

30、 num_output: 500 weight_filler type: “xavier“ bias_filler type: “constant“ bottom: “pool2“ top: “ip1“ 然后是 ReLU层,由于是元素级的操作,我们可以现场激活来节省内存, layers name: “relu1“ #类型是 RELU type: RELU bottom: “ip1“ top: “ip1“ 该层后,我们编写另外一个全连接层: layers name: “ip2“ type: INNER_PRODUCT blobs_lr: 1. blobs_lr: 2. inner_product

31、_param # 输出十个单元 num_output: 10 weight_filler type: “xavier“ bias_filler type: “constant“ bottom: “ip1“ top: “ip2“ 然后是 LOSS层,该 softmax_loss层 同时实现了 SOFTMAX和多项 Logistic损失,即节省了时间,同时提高了数据稳定性。它需要两块,第一块是预测,第二块是数据层提供的标签。它不产生任何输出,它做的是去计算损失函数值,在 BP算法运行的时候使用,启动相对于 ip2的梯度。 layers name: “loss“ type: SOFTMAX_LOSS

32、 bottom: “ip2“ bottom: “label“ 然后就完成了自己编写的网络了 同时定义 MNIST Solver # 定义训练数据来源 train_net: “lenet_train.prototxt“ # 定义检测数据来源 test_net: “lenet_test.prototxt“ # 这里是训练的批次,设为 100,迭代次数 100次,这样,就覆盖了 10000张( 100*100) # 个测试图片。 test_iter: 100 # 每迭代次数 500次测试一次 test_interval: 500 # 学习率,动量,权重的递减 base_lr: 0.01 moment

33、um: 0.9 weight_decay: 0.0005 # 学习政策 inv,注意的是, cifar10类用固定学习率, imagenet用每步递减学习率。 lr_policy: “inv“ gamma: 0.0001 power: 0.75 # 每迭代 100次显示一次 display: 100 # 最大迭代次数 10000次 max_iter: 10000 # 每 5000次迭代存储一次数据到电脑,名字是 lenet。 snapshot: 5000 snapshot_prefix: “lenet“ # 0是用 CPU训练, 1是用 GPU训练。 solver_mode: 1 1.4 训练

34、和测试该模型 注意 更改好路径,这里可以尝试用自己写的网络训练。 然后在终端执行指令: cd $CAFFE_ROOT/examples/mnist ./train_lenet.sh 之后的事就和其他与学习笔记 1差不多了,可以参考学习笔记 1。 下图就是迭代到 5000和迭代到 10000的模型,至于怎么用,在后面的学习笔记将会提及。 主要资料来源: http:/caffe.berkeleyvision.org/gathered/examples/mnist.html 读书笔记 5 逐层可视化图像特征 2014.7.23 薛开宇 本篇比较重要,讲述了如何可视化每层的特征。 其中有些涉及分类的细

35、节,该部分具体看读书笔记 6。 注意,本笔记的代码由原文复制过来,再复制过去 ipython可能会有些格式上的错误,建议使用原文(本文最后)的代码进行复制。 1.1 开始 Ipython notebook 配置 python 文件夹 python的 requirements.txt列举了 Caffe依赖的 python库, 可以看一下教程 具体配置网上有教程 http:/ 我也是手动安装的 Cython=0.19.2 h5py=2.2.0 ipython=1.1.0 leveldb=0.191 matplotlib=1.3.1 networkx=1.8.1 nose=1.3.0 numpy=1

36、.7.1 pandas=0.12.0 protobuf=2.5.0 python-gflags=2.0 scikit-image=0.9.3 scikit-learn=0.14.1 scipy=0.13.2 以 Cython为例, 手动的话用 sudo pip install Cython 即可,然后在 pip的过程中有什么问题就相应解决。 同时注意的是,我们下面的语句都是用 ipython, ipython 中用 ! 表示执行 shell 命令,用 $ 将 python 的变量转化成 shell 变量。通过这种两个符号,我们就可以做到和 shell命令之间的交互,可以非常方便地做许多复杂的工

37、作。 Ipython可以在终端执行,但为了方便,我们可以用 Ipython notebook。 notebook是 web based IPython封装,但是 可以展现富文本,使得整个工作可以以笔记的形式展现、存储,对于交互编程、学习非常方便。 Ipython notebook的安装配置可以在网上找到教程。 http:/ 配置好 python, ipython和 python notebook, 直接在终端输入: ipython notebook 1.2 开始进行 先输入一段代码: In 1: import numpy as np import matplotlib.pyplot as pl

38、t 按 shift+enter执行。 代码的意思是调入 numpy子程序,调入后名字为 np,调入 matplotlib.pyplot子程序(用作画图),调入后名字为 plt。 然后是 (以下是我的路径): caffe_root = /home/xuekaiyu/caffe-master/ 这里注意路径一定要设置正确,记得前后可能都有 “/”,路径的使用是 caffe_root/examples,记得 caffe-master中的 python文件夹需要包括 caffe文件夹。 接着是 import sys sys.path.insert(0, caffe_root + python) imp

39、ort caffe 把 ipython的路径改到我们之前指定的地方,以便可以调入 caffe模块,如果不改路径,import这个指令只会在当前目录查找,是找不到 caffe的。 接着是: plt.rcParamsfigure.figsize = (10, 10) plt.rcParamsimage.interpolation = nearest plt.rcParamsimage.cmap = gray 代码的意思是,显示的图表大小为 10,图形的插值是以最近为原则,图像颜色是灰色 net = caffe.Classifier(caffe_root + examples/imagenet/im

40、agenet_deploy.prototxt, caffe_root + examples/imagenet/caffe_reference_imagenet_model) 预先下载好模型, 模型的大小 232.57MB,可以用指令: examples/imagenet/get_caffe_reference_imagenet_model.sh. 下载。 调用分类网络进行分类,记得设置好路径,启用后,终端将用该模型进行分类。 接着:输入以下指令: net.set_phase_test() net.set_mode_cpu() 再接着,是以下指令: net.set_mean(data, caff

41、e_root + python/caffe/imagenet/ilsvrc_2012_mean.npy) # ImageNet 的均值 net.set_channel_swap(data, (2,1,0) # 因为参考模型本来频道是 BGR,所以要将 RGB转换 net.set_input_scale(data, 255) #参考模型运行在【 0, 255】的灰度,而不是【 0, 1】。 接着是: scores = net.predict(caffe.io.load_image(caffe_root + examples/images/cat.jpg) 出现 in classifier.py

42、line,TpyeError: squeeze takes no keyword arguments. 纠结了半天之后,发现是 numpy版本过低导致的, ubuntu自带的 numpy版本是 1.6.1,更新到 1.7以上。 用指令: sudo pip install numpy -upgrade 然后输入: (k, v.data.shape) for k, v in net.blobs.items() 显示出各层的参数和形状,第一 个是批次,第二个 feature map 数目,第三和第四是每个神经元中图片的长和宽,可以看出,输入是 227*227 的图片,三个频道,卷积是 32个卷积核卷

43、三个频道,因此有 96个 feature map Out4: (data, (10, 3, 227, 227), (conv1, (10, 96, 55, 55), (pool1, (10, 96, 27, 27), (norm1, (10, 96, 27, 27), (conv2, (10, 256, 27, 27), (pool2, (10, 256, 13, 13), (norm2, (10, 256, 13, 13), (conv3, (10, 384, 13, 13), (conv4, (10, 384, 13, 13), (conv5, (10, 256, 13, 13), (po

44、ol5, (10, 256, 6, 6), (fc6, (10, 4096, 1, 1), (fc7, (10, 4096, 1, 1), (fc8, (10, 1000, 1, 1), (prob, (10, 1000, 1, 1) 再输入: (k, v0.data.shape) for k, v in net.params.items() predictions = outself.outputs0.squeeze(axis=(2,3) 输出:一些网络的参数 (conv1, (96, 3, 11, 11), (conv2, (256, 48, 5, 5), (conv3, (384, 25

45、6, 3, 3), (conv4, (384, 192, 3, 3), (conv5, (256, 192, 3, 3), (fc6, (1, 1, 4096, 9216), (fc7, (1, 1, 4096, 4096), (fc8, (1, 1, 1000, 4096) 再接着是一些显示图片的指令: # our network takes BGR images, so we need to switch color channels # 网络需要的是 BGR格式图 片,所以转换颜色频道 def showimage(im): if im.ndim = 3: m = im:, :, :-1

46、plt.imshow(im) # take an array of shape (n, height, width) or (n, height, width, channels) # 用一个格式是(数量,高,宽)或(数量,高,宽,频道)的阵列 # and visualize each (height, width) thing in a grid of size approx. sqrt(n) by sqrt(n) # 每个可视化的都是在 一个 由一个个网格组成 def vis_square(data, padsize=1, padval=0): data -= data.min() dat

47、a /= data.max() # force the number of filters to be square n = int(np.ceil(np.sqrt(data.shape0) padding = (0, n * 2 - data.shape0), (0, padsize), (0, padsize) + (0, 0),) * (data.ndim - 3) data = np.pad(data, padding, mode=constant, constant_values=(padval, padval) # 对图像使用滤波器 data = data.reshape(n, n

48、) + data.shape1:).transpose(0, 2, 1, 3) + tuple(range(4, data.ndim + 1) data = data.reshape(n * data.shape1, n * data.shape3) + data.shape4:) showimage(data) 接着输入: # index four is the center crop # 输出输入的图像 image = net.blobsdata.data4.copy() image -= image.min() image /= image.max() showimage(image.transpose(1, 2, 0) 使用 ipt.show()观看图像: 1.3 各层的特征: 第一个卷积层: 共 96个过滤器 # the parameters are a list of weights, biases filters = net.paramsconv10.data vis_square(filters.transpose(0,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报