Caffe Python 接口 API

Caffe 有 Python 和 Matlab 接口,都可以用于直接调用底层的 Caffe 函数(C++ 实现)。而且 Python 接口可以用于编写脚本,生成自定义的 prototxt 文件,即网络结构定义文件。

一些大型网络比较深,而且结构复杂,比如 ResNet 和 DenseNet,一层一层的编辑 prototxt 文本文件太过繁琐,而且修改起来也很麻烦。如果使用代码能快速生成网络结构的话,可以节约大量的时间。实现这样的代码并不复杂,只是介绍关于这一类的函数的内容太少。此文就是介绍这一类的接口函数 API 。

首先创建一个 *.py 文件,在其中开始输入代码:

from __future__ import print_function
import sys
# your caffe path
sys.path.append('.../caffe/python')
from caffe import layers as L, params as P, to_proto
import caffe

导入 Caffe 的 Python 包完成之后,即可开始编写定义网络结构的代码。注:需要 Caffe 顺利编译成功,而且 pycaffe 接口也要编译通过,否则会报错。

首先定义一个网络变量(Python 的好处就是不需要指定数据类型,和 Caffe 的 blob 类似):

net = caffe.NetSpec()

网络数据层的定义:

# for training
net.data, net.label = L.HDF5Data(hdf5_data_param={'source': '/data/path/', 'batch_size': 32}, 
								 include={'phase': caffe.TRAIN}, ntop=2)
# for validation
net.data, net.label = L.HDF5Data(hdf5_data_param={'source': '/data/path/', 'batch_size': 32}, 
								 include={'phase': caffe.TEST}, ntop=2)    	
# for testing the pretrained network, a dummy input data layer; 
# no label; dim = [num, channel, width, height]								 							 
net.data = L.Input(shape=dict(dim=[1,3,24,24]), ntop=1)

卷积层定义:

net.conv = L.Convolution(net.data, num_output=64, kernel_size=3, stride=1, pad=1,
                         bias_term=False, weight_filler=dict(type='msra'), bias_filler=dict(type='constant'))

反卷积层定义:

# deconvolution for 2x upsample
net.deconv = L.Deconvolution(net.conv, convolution_param=dict(
			    num_output=64, kernel_size=4, stride=2, pad=1, bias_term=False,
			    weight_filler=dict(type='msra'), bias_filler=dict(type='constant')))

ReLU 层定义:

net.relu = L.ReLU(net.conv, in_place=True)

Dropout 层定义:

net.drop = L.Dropout(net.relu, dropout_ratio=0.1)

连接(特征组合)操作:

net.concate = L.Concat(net.conv1, net.conv2, axis=1)

求和、求积操作:

# elementwise summation
net.sum = L.Eltwise(net.conv1, net.conv2)
# elementwise product
net.conv = L.Eltwise(net.conv, net.omega, eltwise_param={'operation': 0})

损失函数层定义:

net.loss = L.EuclideanLoss(net.reconstruct, net.label)

将定义好的 net 输出到 prototxt 文件中:

with open('/file/path/*.prototxt', 'w') as f:
        print(str(net.to_proto()), file=f)

运行 *.py 文件之后,网络结构文件 prototxt 即生成,可用于训练和测试。其中的内容可以用 NetScope 实现可视化,有助于直观地分析网络结构,尤其是网络较深或结构复杂的情况。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值