caffe 创建网络模型
要点
1.在caffe中,我们通常说一个模型,其实就是一个网络,一个Net
2.在caffe2中,我们通常使用modelHelper来代表一个model,而这个model包含多个Net,就像我们前面看到的,我们会使用一个初始化网络init_net,还有有一个训练网络net,这两个网络图都是model的一部分。
初始化和训练
如果我们要构造一个模型,只有一个FC层,在这里使用modelHelper来表示一个model,使用operators来构造网络,一般model有一个param_init_net和一个net。分别用于模型初始化和训练:
model = model_helper.ModelHelper(name="train")
# initialize your weight
weight = model.param_init_net.XavierFill([],blob_out + '_w',shape=[dim_out, dim_in],**kwargs, # maybe indicating weight should be on GPU here
)
# initialize your bias
bias = model.param_init_net.ConstantFill([],blob_out + '_b',shape=[dim_out, ],**kwargs,
)
# finally building FC
model.net.FC([blob_in, weights, bias], blob_out, **kwargs)
前面,我们说过在日常搭建网络的时候呢,我们通常不是完全使用operator搭建网络,因为使用这种方式,每个参数都需要我们手动初始化,以及每个operator都需要构造,太过于繁琐。我们想着,对于常用层,能不能把构造它的operators都封装起来,封装成一个函数,我们构造时只需给这个函数要提供必要的参数,函数中的代码就能帮助我们完成层初始化和operator的构建。
在caffe2中,为了便于开发者搭建网络,caffe2在python/helpers中提供了许多help函数,像上面例子中的FC层,使用python/helpers/fc.py来构造,非常简单就一行代码:
fcLayer = fc(model, blob_in, blob_out, **kwargs) # returns a blob reference
这里面help函数能够帮助我们将权值初始化和计算网络自动分开到两个网络,这样一来就简单多了。caffe2为了更方便调用和管理,把这些帮助函数集合到一起,放在brew这个包里面。可以通过导入brew这个包来调用这些帮助函数。像上面的fc层的实现就可以使用:
from caffe2.python import brew
brew.fc(model, blob_in, blob_out, ...)
我们使用brew构造网络就十分简单,下面的代码就构造了一个LeNet模型:
from caffe2.python import brewdef AddLeNetModel(model, data):conv1 = brew.conv(model, data, 'conv1', 1, 20, 5)pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)conv2 = brew.conv(model, pool1, 'conv2', 20, 50, 5)pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)fc3 = brew.fc(model, pool2, 'fc3', 50 * 4 * 4, 500)fc3 = brew.relu(model, fc3, fc3)pred = brew.fc(model, fc3, 'pred', 500, 10)softmax = brew.softmax(model, pred, 'softmax')
caffe2 使用brew提供很多构造网络的帮助函数,大大简化了我们构建网络的过程。但实际上,这些只是封装的结果,网络构造的原理和之前说的使用operators构建的原理是一样的。
caffe 创建网络模型相关推荐
- caffe创建网络_Caffe2-创建自己的网络
caffe创建网络 Caffe2-创建自己的网络 (Caffe2 - Creating Your Own Network) In this lesson, you will learn to defi ...
- 理解Caffe的网络模型
目录 1. 初见LeNet原始模型 2. Caffe LeNet的网络结构 3. 逐层理解Caffe LeNet 3.1 Data Layer 3.2 Conv1 Layer 3.3 Pool1 La ...
- DeepLabv2 caffe创建可编译环境
参考博文:http://blog.csdn.net/tianrolin/article/details/71246472 Makefile 181行 # LIBRARIES += glog gflag ...
- 深度学习(四十)caffe使用点滴记录
caffe使用点滴记录-持续更新 一.caffe 创建python 层 因为caffe底层是用c++编写的,所以我们有的时候想要添加某一个最新文献出来的新算法,正常的方法是直接编写c++网络层,然而这 ...
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning...
在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练. 但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需 ...
- 使用ANNdotNET GUI工具创建CIFAR-10深度学习模型
目录 编辑说明 数据准备 在Anndotnet中创建新的图像分类项目文件 在ANNdotNET中创建mlconfig 创建网络配置 结论 在这篇文章中,我们将为CIFAR-10数据集创建和训练深度学习 ...
- caffe中的fine-tuning
caffe finetune两种修改网络结构prototxt方法 第一种方法:将原来的prototxt中所有的fc8改为fc8-re.(若希望修改层的学习速度比其他层更快一点,可以将lr_mult改为 ...
- windows下使用conda命令在anaconda环境中安装caffe
一.给caffe创建一个conda环境(创建好了的可以跳过): conda create -n caffe python=3.7 二.进入该环境: conda activate caffe 三.添加a ...
- Mininet--topo类型-py创建自定义拓扑网络
Mininet网络划分 Minnet可以创建多种拓扑网络,主要分为两类,一类是自动型,是指Mininet自带的拓扑类型, 通过--topo参数来指定,分别是linear.minimal.reverse ...
最新文章
- 当互联网人决定躺平......
- OpenCV-Python Feature2D 特征点检测 (SIFT,SURF)
- 如何快捷配置java路径_eclipse常用快捷设置
- 【性能优化】 之 变量邦定
- Android添加单元测试的方法与步骤
- java学习笔记总略
- Java HashMap元素取值
- docker 运行windows程序_如何从Windows上运行任何Linux图形GUI程序?
- FD.io VPP官方邮件列表
- 启航~算法刷题第一天
- 自定义ActionBar
- 计算机电容的作用,请问电脑cpu电容作用是什么?
- 各大快递公司面单号准确性验证的正则表达式,来自淘宝开放平台,时间是20181206,...
- Android USB(type-c)耳机(十)
- oracle触发器和存储过程的格式
- 现代男人养生的10点忠告
- 海康设备添加到萤石云
- java毕向东学习笔记——day01
- linux下的护眼软件
- antv g2字体阴影_antv-g2学习手册-中
热门文章
- java Date.getDay()
- Error in nextTick: “TypeError: Cannot read property ‘xxx‘ of undefined“
- Linux笔记 No.22---(Linux - PAM)
- GRE词汇分类之责骂词汇
- 迅捷在线压缩有什么办法可以压缩视频
- 2019秋招备战复习篇
- 赛博朋克2077配置要求2022
- 输入关键字的爬虫方法(运行环境python3)
- libgdx中文社区网正式上线了-libgdx.net
- 五月集训总结——来自阿光