当设计网络使用`caffe.NetSpec()`时,如何知道某个blob形状?

时间:2017-09-01 18:55:17

标签: deep-learning caffe pycaffe

假设我正在使用caffe.Netspec()设计网络(例如,在启动时),如下所示。

import caffe
from caffe import layers as L

net          = caffe.NetSpec()
net.data     = ... 
net.label    = ...
net["conv1"] = L.convolution(...)
# ... concatenations ... and so on.
net["here"]  = ...

有没有办法知道任何特定图层(例如图层here)的blob形状,如7x7x128? 我想直到1x1形状,所以我需要知道到目前为止哪个形状。

1 个答案:

答案 0 :(得分:0)

caffe.NetSpec()用于初始化网络,这意味着您自己定义网络,包括内核大小和其他参数,如stride,padding。可以根据特定图层所需的输出大小调整这些参数。 因此,了解blob大小并不会出现,因为您自己定义了所有内容。

如果您使用caffe.Net()或caffe.SGDSolver()加载预定义的网络,则可以通过net.blobs.items()访问blob。 你可以尝试这样的事情: [(k,v.data.shape)for k,v in solver.net.blobs.items()]

要熟悉CAFFE网络结构,您可以查看以下示例: https://github.com/BVLC/caffe/blob/master/examples/01-learning-lenet.ipynb

这包括如何定义网络以及如何加载网络。