【caffe2从头学】:3.3.Brewing Models(快速构建模型)
本片文章是我的【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
对象是有意义的。您可能会注意到新的ModelHelper
与CNNModelHelper
具有许多相同的功能。 brew
包装了新的ModelHelper
,使得构造模型(model)比以前更容易。
2.Model Building and Brew’s Helper Functions
在本概述中,我们将介绍brew
,一个轻量级的辅助函数(Helper Functions
)集合,可帮助您构建模型。
1.我们将首先解释Ops
与Helper 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
现在你已经了解了Ops
和Helper
功能,让我们来介绍一下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(快速构建模型)相关推荐
- 【caffe2从头学】:1.快速开始:什么是caffe2?
本片文章是我的[caffe2从头学]系列中的一篇,如果想看其他文章,请看目录: 0.目录 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 2.学习caffe2 3.caffe2 ...
- 【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 ...
- tensorflow从入门到精通100讲(七)-TensorFlow房价预估使用Keras快速构建模型
前言 这篇文章承接上一篇tensorflow从入门到精通100讲(二)-IRIS数据集应用实战 https://wenyusuran.blog.csdn.net/article/details/107 ...
- 【巨人的肩膀上制造世界】——5——Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画!
[巨人的肩膀上制造世界]--5--Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画! 目录 1.博客介绍 2.内 ...
- 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事
数据分析从头学 by Mina Demian 由Mina Demian 数据新闻学入门指南:让我们从头开始构建故事 (A Beginner's Guide to Data Journalism: Le ...
- 33岁想从头学做网页设计_从头到头的10位客户我如何设计和推出saas产品
33岁想从头学做网页设计 Creating a successful software as a service (SaaS) product is the dream for many entrep ...
- 记事本写python怎么运行-从头学Python之编写可执行的.py文件
Python可是真强大.但他具体是怎么强大的,让我们一点一点来了解吧(小编每天晚上下班回家会抽时间看看教程,多充实下自己也是好的). 废话不多说,就讲一下这个背景吧: 事情是这个样子的~本着好学的精神 ...
- Asp.Net Core 轻松学-多线程之Task快速上手
Asp.Net Core 轻松学-多线程之Task快速上手 原文:Asp.Net Core 轻松学-多线程之Task快速上手 前言 Task是从 .NET Framework 4 开始引入的一 ...
- Linux 从头学 01:CPU 是如何执行一条指令的?
摘自:Linux 从头学 01:CPU 是如何执行一条指令的? 作者:IOT物联网小镇 发布时间:2021-07-02 08:22:43 网址:https://blog.csdn.net/jchen1 ...
最新文章
- jsp 实栗 jsp + jdbc 登录
- Python_logging模块
- html5图像调整大小,JavaScript调整HTML5画布中图像的大小
- 这10道springboot常见面试题你需要了解下 1
- 光端机是做什么的?光端机的作用主要有哪些?
- 前端学习(542):node得环境搭建
- url_regex和urlpath _regex区别
- fastreport文本字数太多换行_Python教程第10篇:聊聊print换行输出和重复多次打印...
- J2EE 领域的一些技术框架结构图
- 15个mysql使用管理命令
- Android的代码同步repo
- 微信小程序开发(一):小程序代码构成
- NLP数据预处理——同义词替换程序
- alc236黑苹果驱动_黑苹果亮度调节及调节快捷键驱动
- 基于vue开发的多条件联动筛选特效(类似京东/淘宝/中国移动)
- 3dsMax---期末设计[CC‘s 游乐园’]
- 一年读完100本书(1/100)《微习惯》2021-01-18
- ChatGPT 大规模封号,并停止注册!
- stm32L0系统----开发环境搭建
- QT案例实战1 - 从零开始编写一个OCR工具软件 (6) 关于QThread线程的使用