Caffe学习(九)——Blob,Layer,Net实践

前面几节讲到Blob,Layer,Net,下面直接实践看下Caffe中Blob,Layer,Net如何使用和输出。使用caffe minist中实例(输入python命令进入python的交互界面):

>>>import caffe
>>>net = caffe.Net("examples/mnist/lenet_train_test.prototxt", "examples/mnist/lenet_iter_71.caffemodel", caffe.TEST)

查看conv1的bottom层和top层

>>>net.bottom_names['conv1']
['data']
>>>net.top_names['conv1']
['conv1']

conv1 层的权重Weight数据
net.params[‘conv1’][1].data 输出bias数据

>>>net.params['conv1'][0].data
array([[[[ 0.08391787, -0.12885658, -0.26407543,  0.04432648,
           0.2734467 ],
         [ 0.00385197,  0.06610291,  0.00178612,  0.02617895,
          -0.34734544],
         [ 0.10969362, -0.19426614,

网络执行整网的运算,最终输出到loss层

>>> net.forward()
{'loss': array(0.31564763, dtype=float32), 'accuracy': array(0.89, dtype=float32)}

conv1的blob数据

>>> net.blobs['conv1'].data
array([[[[-0.0445267 , -0.0445267 , -0.0445267 , ..., -0.0445267 ,
          -0.0445267 , -0.0445267 ],
         [-0.0445267 , -0.0445267 , -0.0445267 , ..., -0.0445267 ,
          -0.0445267 , -0.0445267 ],
         [-0.0445267 , -0.0445267 , -0.0445267 , ..., -0.0445267 ,
          -0.0445267 , -0.0445267 ],

blob的维度

>>> net.blobs['conv1'].data.shape
(100, 20, 24, 24)

输出网络所有layers

>>> for layer,blob in net.blobs.iteritems():
...     print layer
...
data
label
label_mnist_1_split_0
label_mnist_1_split_1
conv1
pool1
conv2
pool2
ip1
ip2
ip2_ip2_0_split_0
ip2_ip2_0_split_1
accuracy
loss

这里我使用的是Caffe的python接口(C++接口不太常用,而且python更加直观点),可以看出,Caffe通过caffe.Net()加载网络后,各layer层信息(从.prototxt获取)和参数数据(从.caffemodel获取)均已取得,可以直接进行离线测试。
其实python运行调用的是Caffe C++接口,通过python/caffe/_caffe.cpp封装,代码通过pycaffe的实现python/caffe/pycaffe.py调用。
Caffe学习(九)——Blob,Layer,Net实践_第1张图片

你可能感兴趣的:(caffe)