MxNet系列——how_to——caffe

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


如何在MXNet中使用Caffe操作符

Caffe 是一个有名的,广泛使用的深度学习框架。MXNet 支持在它的符号图中,直接调用大部分Caffe操作符(网络层)和损失函数。使用自定义的Caffe网络层也很容易。

MXNet 也嵌入了Torch模块和它的张量数学函数

本节内容描述了如何:

  • 安装支持Caffe的MXNet

  • 将Caffe操作符嵌入到MXNet的符号图中

安装支持Caffe的MXNet

  1. 下载官方Caffe仓库 BVLC/Caffe
  2. 用于MXNet接口的Caffe补丁。将该补丁放在你的Caffe根目录下,并通过 git apply patch_file_name 来使用该补丁。
  3. 使用官方指南安装Caffe。 详细安装教程

编译支持Caffe的MXNet

  1. 如果你还没有编译MXNet,将 make/config.mk (for Linux) or make/osx.mk (for Mac) 复制到MXNet根目录下,并命名为 config.mk
  2. 在MXNet目录下,编辑文件 config.mk。注释2行: CAFFE_PATH = $(HOME)/caffeMXNET_PLUGINS += plugin/caffe/caffe.mk。将 CAFFE_PATH 设置成Caffe的安装路径【注意:自己的Caffe安装路径】。
  3. 执行命令 make clean && make,构建支持Caffe的MXNet。

使用Caffe操作符(网络层)

MXNet分别通过 mxnet.symbol.CaffeOpmxnet.symbol.CaffeLoss 来支持Caffe的神经网络操作符和损失函数。例如,下面的代码描述了一个 多层感知机 (MLP) 神经网络,它将对MNIST数据集进行分类 完整代码

Python

data = mx.symbol.Variable('data')
fc1  = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }")
act1 = mx.symbol.CaffeOp(data_0=fc1, prototxt="layer{type:\"TanH\"}")
fc2  = mx.symbol.CaffeOp(data_0=act1, num_weight=2, name='fc2', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 64} }")
act2 = mx.symbol.CaffeOp(data_0=fc2, prototxt="layer{type:\"TanH\"}")
fc3 = mx.symbol.CaffeOp(data_0=act2, num_weight=2, name='fc3', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 10}}")
mlp = mx.symbol.SoftmaxOutput(data=fc3, name='softmax')

下面分析一下。首先 data = mx.symbol.Variable('data') 定义了一个符号变量,作为输入数据的占位符。然后,将它传递给Caffe操作符 fc1 = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }")

Caffe操作符的输入的命名方式是 data_i for i=0...num_data-1num_data 是输入的数目。如果 num_data 的值是1,那么你可以像上面例程一样忽略该参数。num_weight 是权重 blobs_ 的数目,它的默认值是0,因为很多操作符没有权重。prototxt 是配置字符串。

如果想使用Caffe中的损失函数,将上面代码中的最后一行替换成下面的代码:

label = mx.symbol.Variable('softmax_label')
mlp = mx.symbol.CaffeLoss(data=fc3, label=label, grad_scale=1, name='softmax', prototxt="layer{type:\"SoftmaxWithLoss\"}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值