导航:首页 > 网络共享 > caffe中改网络在哪个文件

caffe中改网络在哪个文件

发布时间:2022-10-02 03:13:13

A. caffe中怎么固定前面的网络参数,训练后面层的参数

1、会更新,finetune的过程相当于继续训练,跟直接训练的区别是初始化的时候:
a. 直接训练是按照网络定义指定的方式初始化(如高斯随机初始化)
b. finetune是用你已经有的参数文件来初始化(就是之前训练好的caffemodel)
2、嗯,这个问题有两种情况:比如有4个全连接层A->B->C->D
a. 你希望C层的参数不会改变,C前面的AB层的参数也不会改变,这种情况也就是D层的梯度不往前反向传播到D层的输入blob(也就是C层的输出blob 没有得到梯度),你可以通过设置D层的propagate_down为false来做到。
propagate_down的数量与输入blob的数量相同,假如你某个层有2个输入blob,那么你应该在该layer的Param里面写上两行:
propagate_down : 0 # 第1个输入blob不会得到反向传播的梯度
propagate_down : 0 # 第2个输入blob不会得到反向传播的梯度
这样的话,你这个layer的梯度就不会反向传播啦,前面的所有layer的参数也就不会改变了
b. 你希望C层的参数不会改变,但是C前面的AB层的参数会改变,这种情况,只是固定了C层的参数,C层得到的梯度依然会反向传播给前面的B层。只需要将对应的参数blob的学习率调整为0:
你在layer里面加上param { lr_mult: 0 }就可以了,比如全连接层里面:
layer {
type: "InnerProct"
param { # 对应第1个参数blob的配置,也就是全连接层的参数矩阵的配置
lr_mult: 0 # 学习率为0,其他参数可以看caffe.proto里面的ParamSpec这个类型
}
param { # 对应第2个参数blob的配置,也就是全连接层的偏置项的配置
lr_mult: 0 # 学习率为0
}
}
不知道这样说你能不能理解

B. 如何修改caffe源码

首先,利用Understanding软件,可以方便的查看到caffe源码的目录结构,如下图所示。

这个文件涉及到最底层的数据读写工作。

C. 如何利用Caffe训练ImageNet分类网络

1.下载好来自ImageNet的training和validation数据集合;分别存放在如下的格式:
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG

/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG
2. 进行一些预处理操作:
cd $CAFFE_ROOT/data/ilsvrc12/

./get_ilsvrc_aux.sh

3.训练数据和测试数据分别放在train.txt和val.txt中,里面有他们的文件和相对应的标签;
4. 最后作者把1000类的类名用0--999表示,他们相对应的类别名称则用synset_words.txt 来存储他们之间的映射。

5.作者提到怎么去是否应该先把图像都归一化到256*256中,作者提到用Maprece去加快这种过程;

也可以直接这么做:
for name in /path/to/imagenet/val/*.JPEG; do

convert -resize 256x256\! $name $name

Done

6.在 create_imagenet.sh中设置训练的参数,并在里面指定训练和测试的数据库路径,如果图像没有提前归一化到相同的大小,则需要加”RESIZE=true“,设置”GLOG_logtostderr=1 “表示了可以参考更多的信息,
在执行 ./create_imagenet.sh 之后会有新的数据文件生成:
ilsvrc12_train_leveldb 和 ilsvrc12_val_leveldb
7. 因为模型需要我们减去图像的均值,所以我们需要计算图像均值,在工具
tools/compute_image_mean.cpp 实现了这种操作,

或者可以直接用:
./make_imagenet_mean.sh 脚本来进行计算图像均值,并生成:
data/ilsvrc12/imagenet_mean.binaryproto 文件

8.定义网络的结构:imagenet_train_val.prototxt .
里面有两行指定了数据库和图像的路径
source: "ilvsrc12_train_leveldb"

mean_file:"../../data/ilsvrc12/imagenet_mean.binaryproto"
并且指定了 include { phase: TRAIN } or include { phase: TEST } .来区分训练和测试

9.关于输入层的不同:
训练数据中,,data项来自 ilsvrc12_train_leveldb 并且进行了随机镜像操作,测试数据中data项来自于ilsvrc12_val_leveldb 而没有进行随机镜像操作;

10.输出层的不同:
输出层都为 softmax_loss 层,在训练网络当中,用来计算损失函数,并且用来初始化BP过程,测试网络同样有一个第二个输出层,accuracy,它用来报告测试的精度,在训练的过程中,测试网络将实例化并且测试准确率,产成的命令行为:Test score #0: xxx and Test score #1: xxx 等。

11.运行网络,其中设置
每批batch为256个,运行450000次迭代,接近90次epoch;
每1000次迭代,就在用测试集进行测试;
设置初始的学习率为0.01,并且每100000次迭代中进行学习率下降,大概进行20次epoch;
每20次epoch就显示出一些数据信息;
网络训练的动量为0.9,权重衰减因子为0.0005,
每10000次迭代中,就生成当前状态的快照;
这些设置在 examples/imagenet/imagenet_solver.prototxt .中进行设置,并且同样我们需要指定文件的路径:
net: "imagenet_train_val.prototxt"

12.开始训练网络:
./train_imagenet.sh
13. 在K20中,每20个迭代花费36s,所以,一幅图像的一次前馈+反馈(FW+BW)大概需要7ms,前馈花费2.5ms,剩下的是反馈,
可以在 examples/net_speed_benchmark.cpp 中进行时间的查看;

14.因为我们有保存了快照,所以我们可以通过
./resume_training.sh 来进行resume恢复,脚本caffe_imagenet_train_1000.solverstate 保留了要恢复的所有信息,
15.总结,Caffe可以很方便进行通过设置文件的方式来进行设置不同的网络结构。

D. caffe网络配置文件中layer和layers的区别

Here's roughly the process I follow.

Add a class declaration for your layer to the appropriate one of common_layers.hpp, data_layers.hpp,loss_layers.hpp, neuron_layers.hpp,
or vision_layers.hpp. Include an inline implementation oftype and
the *Blobs() methods to specify blob number requirements. Omit the *_gpu declarations
if you'll only be implementing CPU code.
Implement your layer in layers/your_layer.cpp.
SetUp for initialization: reading parameters, allocating buffers, etc.
Forward_cpu for the function your layer computes
Backward_cpu for its gradient
(Optional) Implement the GPU versions Forward_gpu and Backward_gpu in layers/your_layer.cu.
Add your layer to proto/caffe.proto, updating the next available ID. Also declare
parameters, if needed, in this file.
Make your layer createable by adding it to layer_factory.cpp.
Write tests in test/test_your_layer.cpp. Use test/test_gradient_check_util.hpp to
check that your Forward and Backward implementations are in numerical agreement.
上面是一个大致的流程,我就直接翻译过来吧,因为我自己琢磨出来的步骤跟这个是一样的。在这
里,我们就添加一个Wtf_Layer,然后作用跟Convolution_Layer一模一样。注意这里的命名方式,Wtf第一个字母大写,剩下的小
写,算是一个命名规范吧,强迫症表示很舒服。
1. 首先确定要添加的layer的类型,是common_layer 还是
data_layer 还是loss_layer, neuron_layer, vision_layer
,这里的Wtf_Layer肯定是属vision_layer了,所以打开vision_layers.hpp
然后复制convolution_layer的相关代码,把类名还有构造函数的名字改为WtfLayer,如果没有用到GPU运算,那么把里面的带GPU
的函数都删掉

2. 将Wtf_layer.cpp 添加到src\caffe\layers文件夹中,代码内容复制convolution_layer.cpp 把对应的类名修改(可以搜一下conv关键字,然后改为Wtf)

3. 假如有gpu的代码就添加响应的Wtf_layer.cu (这里不添加了)

4. 修改proto/caffe.proto文件,找到LayerType,添加WTF,并更新ID(新的ID应该是34)。假如说Wtf_Layer有参数,比如Convolution肯定是有参数的,那么添加WtfParameter类

5. 在layer_factory.cpp中添加响应的代码,就是一堆if ... else的那片代码

6. 这个可以不做,但是为了结果还是做一个,就是写一个测试文件,检查前向后向传播的数据是否正确。gradient_check的原理可以参考UFLDL教程的对应章节

之后我会更新我自己写的maxout_layer的demo,在这立一个flag以鞭策自己完成吧╮(╯▽╰)╭

(二) 如何添加maxout_layer

表示被bengio的maxout给搞郁闷了,自己摆出一个公式巴拉巴拉说了一堆,结果用到卷积层的maxout却给的另一种方案,吐槽无力,不过后来又想了下应该是bengio没表述清楚的问题。

我的maxout的算法思路是这样的,首先要确定一个group_size变量,表示
最大值是在group_size这样一个规模的集合下挑选出来的,简而言之就是给定group_size个数,取最大。确定好group_size变量,
然后让卷积层的output_num变为原来的group_size倍,这样输出的featuremap的个数就变为原来的group_size倍,然后
以group_size为一组划分这些featuremap,每组里面挑出响应最大的点构成一个新的featuremap,这样就得到了maxout层的
输出。

E. 如何调用caffe已经训练好的net

我不了解你是怎么训练的,但是对于二分类问题最后准确率是0.5,有可能是因为最终结果都分到同一类上面去了,这个你需要调用caffe看看网络最终的输出来判断
对于二分类问题,一般训练的时候,正负样本要混合在一起训练(一般在输入层那里设置shuffle来做到),如果没有shuffle,并且你的输入数据正好是前面的是正样本,后面的是负样本,那么就会造成你的网络最开始一直倾向于输出1,在输入一直是正样本的时候,loss的确会下降,然后到负样本的时候,loss一下子跳很高,由于后面全是负样本,网络训练使得它倾向于输出0,就又慢慢降下来了,最终你的网络基本上就是输出值都是1或者都是0了
如果是这种情况,可以在输入层那里设置shuffle为true
当然具体情况具体分析,我也不了解你的情况,只是告诉你有这个可能而已

F. 如何修改caffe上lenet模型

1 cifar10数据库

60000张32*32 彩色图片 共10类

50000张训练

10000张测试

下载cifar10数据库

这是binary格式的,所以我们要把它转换成leveldb格式。

2 在../caffe-windows/examples/cifar10文件夹中有一个 convert_cifar_data.cpp

将他include到MainCaller.cpp中。如下:编译....我是一次就通过了 ,在bin文件夹里出现convert_cifar_data.exe。然后 就可以进行格式转换。binary→leveldb

可以在bin文件夹下新建一个input文件夹。将cifar10.binary文件放在input文件夹中,这样转换时就不用写路径了。

cmd进入bin文件夹

执行后,在output文件夹下有cifar_train_leveldb和cifar_test_leveldb两个文件夹。里面是转化好的leveldb格式数据。

当然,也可以写一个bat文件处理,方便以后再次使用。

3 下面我们要求数据图像的均值

编译../../tools/comput_image_mean.cpp

编译成功后。接下来求mean

cmd进入bin。

执行后,在bin文件夹下出现一个mean.binaryproto文件,这就是所需的均值文件。

4 训练cifar网络

在.../examples/cifar10文件夹里已经有网络的配置文件,我们只需要将cifar_train_leveldb和cifar_test_leveldb两个文件夹还有mean.binaryproto文件拷到cifar0文件夹下。

修改cifar10_quick_train.prototxt中的source: "cifar-train-leveldb" mean_file: "mean.binaryproto" 和cifar10_quick_test.prototxt中的source: "cifar-test-leveldb"
mean_file: "mean.binaryproto"就可以了,

后面再训练就类似于MNIST的训练。写一个train_quick.bat,内容如下:

[plain] view plain
..\\..\\bin\\MainCaller.exe ..\\..\\bin\\train_net.exe
SET GLOG_logtostderr=1
"../../bin/train_net.exe" cifar10_quick_solver.prototxt
pause

先编译一遍 train_net.cpp
运行train_quick.bat

G. 如何针对自己的需要修改caffe的网络

你说的可能是finetune,它有几个步骤

  1. 根据自己的数据分类类别,修改原有网络的最后一层全连接层

  2. 将前面各层均冻结参数,仅打开最后一层全连接层的参数更新

  3. 载入模型已有参数,如caffenet,vgg等

  4. 根据自己的数据对模型进行微调训练。

  5. 微调成功后,可选择打开所有层进行小步长参数更新。

我在网上讲caffe,感兴趣可以搜搜我的名字。

H. caffe安装在ubuntu中哪里

Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络操作步骤

  1. 将终端定位到Caffe根目录;

  2. 2.MNIST数据库并解压缩:$ ./data/mnist/get_mnist.sh

  3. 3.将其转换成Lmdb数据库格式:$ ./examples/mnist/create_mnist.sh

  4. 执行完此shell脚本后,会在./examples/mnist下增加两个新目录,mnist_test_lmdb和mnist_train_lmdb

  5. 4.train model:$ ./examples/mnist/train_lenet.sh

  6. (1)、使用LeNet网络(《Gradient-BasedLearning Applied to Document Recognition》);

  7. (2)、使用./examples/mnist/lenet_train_test.prototxtmodel;

  8. (3)、使用./examples/mnist/lenet_solver.prototxtmodel;

  9. (4)、执行train_lenet.sh脚本,会调用./build/tools目录下的caffe执行文件,此执行文件的实现是./tools目录下的caffe.cpp文件;

  10. (5)、执行此脚本后,会生成几个文件,其中./examples/mnist/lenet_iter_10000.caffemodel则是最终训练生成的model文件;

  11. (6)、以上默认的是在GPU模式下运行,如果想让其在CPU模式下运行,只需将lenet_solver.prototxt文件中的solver_mode字段值由原来的GPU改为CPU即可。

阅读全文

与caffe中改网络在哪个文件相关的资料

热点内容
怎样学好网络营销专业 浏览:868
手机移动网络不用时要不要关闭 浏览:694
苹果游戏机wifi网络差怎么办 浏览:949
无线网络产品型号 浏览:875
网络安全法考试含答案 浏览:685
手机网络共享开启热点有什么用途 浏览:933
贵广网络怎么设置喜欢频道 浏览:356
itunes数据线共享网络 浏览:622
移动网络营销有哪些 浏览:836
复位后可以连wifi没有网络 浏览:993
p10移动网络接入点 浏览:426
中华人民共和国网络安全法包括多少章多少条 浏览:354
网络断太多少号 浏览:124
手机wifi能连接网络不可用 浏览:215
中控702打卡机网络设置 浏览:234
wifi无法介入网络 浏览:225
台式电脑应急网络 浏览:227
数据库连接网络 浏览:266
网络放大器密码忘了怎么办 浏览:159
户外山区网络信号增强器 浏览:365

友情链接