本片文章是我的【caffe2从头学】系列中的一篇,如果想看其他文章,请看目录:


0.目录
1.快速开始

1.1.什么是caffe2 ?
1.2.安装caffe2

2.学习caffe2
3.caffe2官方教程的安装与使用

3.1.Blobs and Workspace, Tensors,Net 概念
3.2.Caffe2 的一些基本概念 - Workspaces&Operators & Nets & Nets 可视化
3.3.Brewing Models(快速构建模型)
3.4.Toy_Regression
3.5.Models and Datasets
3.6.Loading_Pretrained_Models
3.7.Image_Pre-Processing_Pipeline
3.8.MNIST
3.9.create_your_own_dataset

4.参考
5.API

相关代码在我的github仓库:https://github.com/JackKuo666/csdn/tree/master/caffe2


本页来自:https://caffe2.ai/docs/brew

1.Brewing Models

brew是Caffe2用于构建模型的新API。CNNModelHelper过去曾在caffe里担任过这个角色,但由于Caffe2的扩展远远超出了CNN的优势,因此提供更通用的ModelHelper对象是有意义的。您可能会注意到新的ModelHelperCNNModelHelper具有许多相同的功能。 brew包装了新的ModelHelper,使得构造模型(model)比以前更容易。

2.Model Building and Brew’s Helper Functions

在本概述中,我们将介绍brew,一个轻量级的辅助函数(Helper Functions)集合,可帮助您构建模型。
  1.我们将首先解释OpsHelper Functions的关键概念。
  2.然后我们将展示brew使用情况,它如何充当ModelHelper对象的接口,以及arg_scope语法糖。
  3.最后,我们讨论了引入brew的动机。

3.Concepts: Ops vs Helper Functions

在我们深入研究brew之前,我们应该回顾caffe2中的一些约定以及神经网络层是如何表示的。caffe2的深度学习网络net是由操作符operators建立的。通常,这些操作符operators是用c++编写的,以获得最大的性能。caffe2还提供了一个Python API来包装这些c++操作符operators,因此您可以更灵活地进行实验和原型设计。在caffe2中,操作符operators总是以骆驼拼写法( CamelCase fashion)的形式出现,而具有类似名称的Python helper functions是小写的。下面是一些例子。

3.1.Ops

我们经常将操作符operator称为Op或运算符集合operators作为Ops。例如,FC Op代表一个完全连接的运算符,它与前一层中的每个神经元和下一层的每个神经元都有加权连接。例如,您可以使用以下命令创建FC Op

model.net.FC([blob_in, weights, bias], blob_out)

或者您可以创建一个Copy Op

model.net.Copy(blob_in, blob_out)

ModelHelper处理的操作符operators列表在本文档的底部,目前包括最常用的29个。这是写这篇文章时的400+ Ops caffe2的一个子集。

还应注意,您还可以创建一个没有注释网络的operator。例如,就像我们创建Copy Op的前一个示例一样,我们可以使用以下代码在model.net上创建一个Copy运算符:

model.Copy(blob_in, blob_out)

3.2.Helper Functions

仅仅使用单个operator来构建模型/网络可能很费劲,因为您必须自己完成参数初始化,设备/引擎选择(但这也是Caffe2如此之快的原因!)。例如,要构建FC层,您需要使用几行代码来准备权重和偏差,然后将其提供给Op

这是更长的手动方式:

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)

幸运的是,Caffe2helper functions可以提供帮助。helper functions是包装函数,可为模型(model)创建完整的层(layer)。helper functions通常用于处理参数初始化,operator定义和引擎选择。 Caffe2默认helper functions在Python PEP8函数约定中命名。例如,使用python / helpers / fc.py,通过helper functions fc实现FC Op要简单得多:
  使用helper functions的更简单方法:

fcLayer = fc(model, blob_in, blob_out, **kwargs) # returns a blob reference

一些helper functions构建了多于1个operator。例如,python/rnn_cell.py中的LSTM函数可帮助您在网络中构建整个LSTM单元。

查看repo以获得更酷的帮助函数!

4.brew

现在你已经了解了OpsHelper功能,让我们来介绍一下brew如何使模型构建变得更加容易。 brew是一个智能的辅助函数helper functions集合。只需导入一个brew模块,即可使用所有Caffe2强大的helper functions功能。您现在可以使用以下方法添加FC层:

from caffe2.python import brewbrew.fc(model, blob_in, blob_out, ...)

这与直接使用helper functions几乎相同,但是一旦模型变得更复杂,brew就会开始闪耀。以下是从MNIST教程中提取的LeNet模型构建示例。

rom 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')

每个层都是使用brew创建的,而brew又使用其operator hooks来实例化每个Op

4.1.arg_scope

arg_scope是一种语法糖,可以在其上下文中设置默认的helper functions参数值。例如,假设您想在ResNet-150训练脚本中尝试不同的权重初始化。你可以:

# change all weight_init here
brew.conv(model, ..., weight_init=('XavierFill', {}),...)# repeat 150 timesbrew.conv(model, ..., weight_init=('XavierFill', {}),...)

或者在arg_scope的帮助下,你可以:

with brew.arg_scope([brew.conv], weight_init=('XavierFill', {})):brew.conv(model, ...) # no weight_init needed here!brew.conv(model, ...)...

5.Custom Helper Function

当您更频繁地使用brew并且发现需要实现Brew目前不涵盖的Op时,您将需要编写自己的Helper Function。您可以将您自己的Helper Function注册为brew,以享受统一管理和语法糖。
  只需定义新的Helper Function,使用.Register函数将其注册到brew,然后使用brew.new_helper_function调用它。

def my_super_layer(model, blob_in, blob_out, **kwargs):
"""100x faster, awesome code that you'll share one day.
"""brew.Register(my_super_layer)
brew.my_super_layer(model, blob_in, blob_out)

6.Caffe2 Default Helper Functions

请访问:https://caffe2.ai/docs/brew

accuracy
add_weight_decay
average_pool
concat
conv
conv_nd
conv_transpose
depth_concat
dropout
fc
fc_decomp
fc_prune
fc_sparse
group_conv
group_conv_deprecated
image_input
instance_norm
iter
lrn
max_pool
max_pool_with_index
packed_fc
prelu
softmax
spatial_bn
relu
sum
transpose
video_input

7.Motivation for brew

感谢您阅读有关brew的全部概述!恭喜你,你终于来了!简而言之,我们希望将模型构建过程和模型存储分开。在我们看来,ModelHelper类应该只包含网络定义和参数信息。 brew模块将具有构建网络和初始化参数的功能。

与之前同时进行模型存储模型构建的巨型CNNModelHelper相比,模型构建的ModelHelper + brew方式更加模块化,更易于扩展。在命名方面,由于Caffe2系列支持各种网络,包括MLP,RNN和CNN,因此它也更不容易混淆。 我们希望本教程能够帮助您更快,更轻松地建立模型,同时更深入地了解Caffe2。python/brew_test.py中有一个brew使用的详细示例。如果您对brew有任何疑问,请随时与我们联系并在回购问题中提出问题。再次感谢您拥抱新的brew API。

【caffe2从头学】:3.3.Brewing Models(快速构建模型)相关推荐

  1. 【caffe2从头学】:1.快速开始:什么是caffe2?

    本片文章是我的[caffe2从头学]系列中的一篇,如果想看其他文章,请看目录: 0.目录 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 2.学习caffe2 3.caffe2 ...

  2. 【caffe2从头学】:1.2安装(Ubuntu16.04+GTx 1070Ti+cuda9.0+cudnn7.2+anaconda2+Python2.7+caffe2【Python版本】)

    本片文章是我的[caffe2从头学]系列中的一篇,如果想看其他文章,请看目录: 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 1.3.安装容易出现的问题 2.学习caffe2 ...

  3. tensorflow从入门到精通100讲(七)-TensorFlow房价预估使用Keras快速构建模型

    前言 这篇文章承接上一篇tensorflow从入门到精通100讲(二)-IRIS数据集应用实战 https://wenyusuran.blog.csdn.net/article/details/107 ...

  4. 【巨人的肩膀上制造世界】——5——Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画!

    [巨人的肩膀上制造世界]--5--Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画! 目录 1.博客介绍 2.内 ...

  5. 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事

    数据分析从头学 by Mina Demian 由Mina Demian 数据新闻学入门指南:让我们从头开始构建故事 (A Beginner's Guide to Data Journalism: Le ...

  6. 33岁想从头学做网页设计_从头到头的10位客户我如何设计和推出saas产品

    33岁想从头学做网页设计 Creating a successful software as a service (SaaS) product is the dream for many entrep ...

  7. 记事本写python怎么运行-从头学Python之编写可执行的.py文件

    Python可是真强大.但他具体是怎么强大的,让我们一点一点来了解吧(小编每天晚上下班回家会抽时间看看教程,多充实下自己也是好的). 废话不多说,就讲一下这个背景吧: 事情是这个样子的~本着好学的精神 ...

  8. Asp.Net Core 轻松学-多线程之Task快速上手

    Asp.Net Core 轻松学-多线程之Task快速上手 原文:Asp.Net Core 轻松学-多线程之Task快速上手 前言     Task是从 .NET Framework 4 开始引入的一 ...

  9. Linux 从头学 01:CPU 是如何执行一条指令的?

    摘自:Linux 从头学 01:CPU 是如何执行一条指令的? 作者:IOT物联网小镇 发布时间:2021-07-02 08:22:43 网址:https://blog.csdn.net/jchen1 ...

最新文章

  1. jsp 实栗 jsp + jdbc 登录
  2. Python_logging模块
  3. html5图像调整大小,JavaScript调整HTML5画布中图像的大小
  4. 这10道springboot常见面试题你需要了解下 1
  5. 光端机是做什么的?光端机的作用主要有哪些?
  6. 前端学习(542):node得环境搭建
  7. url_regex和urlpath _regex区别
  8. fastreport文本字数太多换行_Python教程第10篇:聊聊print换行输出和重复多次打印...
  9. J2EE 领域的一些技术框架结构图
  10. 15个mysql使用管理命令
  11. Android的代码同步repo
  12. 微信小程序开发(一):小程序代码构成
  13. NLP数据预处理——同义词替换程序
  14. alc236黑苹果驱动_黑苹果亮度调节及调节快捷键驱动
  15. 基于vue开发的多条件联动筛选特效(类似京东/淘宝/中国移动)
  16. 3dsMax---期末设计[CC‘s 游乐园’]
  17. 一年读完100本书(1/100)《微习惯》2021-01-18
  18. ChatGPT 大规模封号,并停止注册!
  19. stm32L0系统----开发环境搭建
  20. QT案例实战1 - 从零开始编写一个OCR工具软件 (6) 关于QThread线程的使用

热门文章

  1. excel去除重复处理
  2. 公众号推文制作及发布保姆级教程
  3. LearnGL - 05 - Texture
  4. FFmpeg自学入门笔记
  5. 自学Java如何正确入门?
  6. shell之大小写转换
  7. 阿里巴巴离职DBA职业生涯总结
  8. Web 开发框架 — Express 精讲(安装使用、静态托管、路由处理、中间件的使用)
  9. Creator打android包时报Could not resolve all files for configuration ':jcore-react-native:lintClassPath'异
  10. Hastelloy G-35哈氏合金板材 棒材