如何使用 Torch 从 Caffe 模型中获取图层。
2015-1-27 16:26:21
收藏:0
阅读:58
评论:1
在 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] // 我想在 lua 中获取这个值
然而,在使用 torch 时,我有些困惑,因为我不知道如何执行相同的操作。 目前我有以下代码
require 'caffe'
require 'image'
net = caffe.Net('/opt/caffe/models/bvlc_reference_caffenet/deploy.prototxt', '/opt/caffe/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel')
img = image.lena()
dest = torch.Tensor(3, 227,227)
img = image.scale(dest, img)
img = img:resize(10,3,227,227)
output = net:forward(img:float())
conv_nodes = net:findModules('fc7') -- 不起作用
任何帮助将不胜感激。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
首先请注意,torch-caffe-binding(即您与
require'caffe'一起使用的工具)是LuaJIT FFI的直接封装器,围绕Caffe库构建而成。 这意味着它允许您方便地使用Torch张量进行向前或向后操作,但在幕后,这些操作是在caffe::Net上进行的,而不是在Torchnn网络上进行的。 因此,如果您想操纵普通的Torch网络 ,则应使用loadcaffe库,该库会将网络完全转换为nn.Sequential:require'loadcaffe' local net = loadcaffe.load('net.prototxt','net.caffemodel')然后,您可以使用
findModules。但是,请注意,您不能再使用它们的初始标签(例如conv1或fc7),因为它们会在convert之后被丢弃。这里的
fc7(=INNER_PRODUCT)对应于N-1线性变换。因此,您可以按如下方式获取它:local nodes = net:findModules('nn.Linear') local fc7 = nodes[#nodes-1]然后,您可以通过
fc7.weight和fc7.bias读取数据(权重和偏差) - 这些都是常规的torch.Tensor。更新 截至提交 2516fac ,loadcaffe现在也保存了层名称。因此,要检索
'fc7'层,您现在可以执行以下操作:local fc7 for _, m in pairs(net: listModules()) do if m.name == 'fc7' then fc7 = m break end end