如何使用火炬从咖啡馆模型中获取图层

2024-05-13 19:40:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,当我想使用caffe从层获取数据时,我有以下代码

    input_image = caffe.io.load_image(imgName)
    input_oversampled = caffe.io.resize_image(input_image, self.net.crop_dims)
    prediction = self.net.predict([input_image])
    caffe_input = np.asarray(self.net.preprocess('data', prediction))
    self.net.forward(data=caffe_input)
    data = self.net.blobs['fc7'].data[4] // I want to get this value in lua

当我用手电筒的时候,我有点卡住了,因为我不知道怎么做同样的动作。 目前我有以下代码

^{pr2}$

任何帮助都将不胜感激


Tags: 代码iocropimageselfinputdatanet
1条回答
网友
1楼 · 发布于 2024-05-13 19:40:39

首先请注意,torch-caffe-binding(即与require 'caffe'一起使用的工具)是Caffe库的直接包装器,这要归功于LuaJIT FFI。在

这意味着它允许你方便地用Torch张量进行正向或反向操作,但是behind the scenes这些操作是在caffe::Net而不是在Torchnn网络上进行的。在

因此,如果你想操作一个普通的Torch network,你应该使用loadcaffe库,它将网络完全转换为^{}

require 'loadcaffe'

local net = loadcaffe.load('net.prototxt', 'net.caffemodel')

然后可以使用^{}。但是请注意,您不能再使用它们的初始标签(如conv1或{}),因为它们是{a7}。在

这里fc7INNER_PRODUCT)对应于N-1线性变换。因此,您可以得到如下结果:

^{pr2}$

然后,您可以通过fc7.weightfc7.bias读取数据(权重和偏差),这是常规的torch.Tensor-s


更新

到提交时,2516facloadcaffe现在还保存层名称。因此,要检索'fc7'层,现在可以执行以下操作:

local fc7
for _,m in pairs(net:listModules()) do
  if m.name == 'fc7' then
    fc7 = m
    break
  end
end

相关问题 更多 >