Caffe in Python之定义网络结构和添加自定义网络层
2016-07-30 16:30
447 查看
转自:http://christopher5106.github.io/deep/learning/2015/09/04/Deep-learning-tutorial-on-Caffe-Technology.html
Define a model in Python
It is also possible to define the net model directly in Python, and save it to a prototxt files. Here are the commands :from caffe import layers as L from caffe import params as P def lenet(lmdb, batch_size): # our version of LeNet: a series of linear and simple nonlinear transformations n = caffe.NetSpec() n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB, source=lmdb, transform_param=dict(scale=1./255), ntop=2) n.conv1 = L.Convolution(n.data, kernel_size=5, num_output=20, weight_filler=dict(type='xavier')) n.pool1 = L.Pooling(n.conv1, kernel_size=2, stride=2, pool=P.Pooling.MAX) n.conv2 = L.Convolution(n.pool1, kernel_size=5, num_output=50, weight_filler=dict(type='xavier')) n.pool2 = L.Pooling(n.conv2, kernel_size=2, stride=2, pool=P.Pooling.MAX) n.ip1 = L.InnerProduct(n.pool2, num_output=500, weight_filler=dict(type='xavier')) n.relu1 = L.ReLU(n.ip1, in_place=True) n.ip2 = L.InnerProduct(n.relu1, num_output=10, weight_filler=dict(type='xavier')) n.loss = L.SoftmaxWithLoss(n.ip2, n.label) return n.to_proto() with open('examples/mnist/lenet_auto_train.prototxt', 'w') as f: f.write(str(lenet('examples/mnist/mnist_train_lmdb', 64))) with open('examples/mnist/lenet_auto_test.prototxt', 'w') as f: f.write(str(lenet('examples/mnist/mnist_test_lmdb', 100)))
Create your custom python layer
Let’s create a layer to add a value.Add a custom python layer to yourconv.prototxtfile :
layer {name: 'MyPythonLayer'type: 'Python'top: 'output'bottom: 'conv'python_param {module: 'mypythonlayer'layer: 'MyLayer'param_str: "'num': 21"}}and create a
mypythonlayer.pyfile that has to to be in the current directory or in the PYTHONPATH :
import caffeimport numpy as npimport yamlclass MyLayer(caffe.Layer):def setup(self, bottom, top):self.num = yaml.load(self.param_str)["num"]print "Parameter num : ", self.numdef reshape(self, bottom, top):passdef forward(self, bottom, top):top[0].reshape(*bottom[0].shape)top[0].data[...] = bottom[0].data + self.numdef backward(self, top, propagate_down, bottom):passThis layer will simply add a value
net = caffe.Net('conv.prototxt',caffe.TEST)im = np.array(Image.open('cat_gray.jpg'))im_input = im[np.newaxis, np.newaxis, :, :]net.blobs['data'].reshape(*im_input.shape)net.blobs['data'].data[...] = im_inputnet.forward()
相关文章推荐
- Caffe: 用Python绘制网络结构
- caffe如何自定义网络以及自定义层(python)(二)
- 【用Python学习Caffe】8. 网络结构的权重共享量化
- Python基于numpy灵活定义神经网络结构的方法
- 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
- 使用Anaconda安装库文件、控制台运行Python文件、显示Caffe网络结构
- 【用Python学习Caffe】7. 网络结构的修剪
- 【SDN专栏】Mininet下编写python,实现自定义的网络topo结构
- python实现简单的卷积神经网络CNN案例1:定义CNN网络结构
- caffe如何自定义网络以及自定义层(python)(一)
- windows caffe 添加UpsampleLayer BNLayer以支持SegNet网络结构
- caffe如何自定义网络以及自定义层(python)(四)
- Windows下使用python绘制caffe中.prototxt网络结构数据可视化
- <Learning Transferable Features with Deep Adaptation Networks>caffe 添加MMDLoss层(caffe 自定义网络层)
- caffe 使能python接口使用draw_net.py绘制网络结构图过程
- caffe如何自定义网络以及自定义层(python)(六)
- 【caffe学习笔记之5】Win10系统下Caffe的Python接口设置方法并绘制网络结构图
- caffe源码学习——用python定义网络时,源代码生成prototxt文件的原理
- 【用Python学习Caffe】4. 设计自己的网络结构
- caffe学习笔记7-python接口绘制网络结构图