要点

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 创建网络模型相关推荐

  1. caffe创建网络_Caffe2-创建自己的网络

    caffe创建网络 Caffe2-创建自己的网络 (Caffe2 - Creating Your Own Network) In this lesson, you will learn to defi ...

  2. 理解Caffe的网络模型

    目录 1. 初见LeNet原始模型 2. Caffe LeNet的网络结构 3. 逐层理解Caffe LeNet 3.1 Data Layer 3.2 Conv1 Layer 3.3 Pool1 La ...

  3. DeepLabv2 caffe创建可编译环境

    参考博文:http://blog.csdn.net/tianrolin/article/details/71246472 Makefile 181行 # LIBRARIES += glog gflag ...

  4. 深度学习(四十)caffe使用点滴记录

    caffe使用点滴记录-持续更新 一.caffe 创建python 层 因为caffe底层是用c++编写的,所以我们有的时候想要添加某一个最新文献出来的新算法,正常的方法是直接编写c++网络层,然而这 ...

  5. 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning...

    在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练. 但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需 ...

  6. 使用ANNdotNET GUI工具创建CIFAR-10深度学习模型

    目录 编辑说明 数据准备 在Anndotnet中创建新的图像分类项目文件 在ANNdotNET中创建mlconfig 创建网络配置 结论 在这篇文章中,我们将为CIFAR-10数据集创建和训练深度学习 ...

  7. caffe中的fine-tuning

    caffe finetune两种修改网络结构prototxt方法 第一种方法:将原来的prototxt中所有的fc8改为fc8-re.(若希望修改层的学习速度比其他层更快一点,可以将lr_mult改为 ...

  8. windows下使用conda命令在anaconda环境中安装caffe

    一.给caffe创建一个conda环境(创建好了的可以跳过): conda create -n caffe python=3.7 二.进入该环境: conda activate caffe 三.添加a ...

  9. Mininet--topo类型-py创建自定义拓扑网络

    Mininet网络划分 Minnet可以创建多种拓扑网络,主要分为两类,一类是自动型,是指Mininet自带的拓扑类型, 通过--topo参数来指定,分别是linear.minimal.reverse ...

最新文章

  1. 当互联网人决定躺平......
  2. OpenCV-Python Feature2D 特征点检测 (SIFT,SURF)
  3. 如何快捷配置java路径_eclipse常用快捷设置
  4. 【性能优化】 之 变量邦定
  5. Android添加单元测试的方法与步骤
  6. java学习笔记总略
  7. Java HashMap元素取值
  8. docker 运行windows程序_如何从Windows上运行任何Linux图形GUI程序?
  9. FD.io VPP官方邮件列表
  10. 启航~算法刷题第一天
  11. 自定义ActionBar
  12. 计算机电容的作用,请问电脑cpu电容作用是什么?
  13. 各大快递公司面单号准确性验证的正则表达式,来自淘宝开放平台,时间是20181206,...
  14. Android USB(type-c)耳机(十)
  15. oracle触发器和存储过程的格式
  16. 现代男人养生的10点忠告
  17. 海康设备添加到萤石云
  18. java毕向东学习笔记——day01
  19. linux下的护眼软件
  20. antv g2字体阴影_antv-g2学习手册-中

热门文章

  1. java Date.getDay()
  2. Error in nextTick: “TypeError: Cannot read property ‘xxx‘ of undefined“
  3. Linux笔记 No.22---(Linux - PAM)
  4. GRE词汇分类之责骂词汇
  5. 迅捷在线压缩有什么办法可以压缩视频
  6. 2019秋招备战复习篇
  7. 赛博朋克2077配置要求2022
  8. 输入关键字的爬虫方法(运行环境python3)
  9. libgdx中文社区网正式上线了-libgdx.net
  10. 五月集训总结——来自阿光