首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改Imagenet Caffe模型?

如何修改Imagenet Caffe模型?
EN

Stack Overflow用户
提问于 2016-12-08 17:26:51
回答 1查看 3.3K关注 0票数 6

我想修改ImageNet的caffe模型,如下所述:

由于时态网的输入信道数与空间网的输入信道数不同(20vs.3),我们将第一层的ImageNet模型滤波器平均在信道上,然后将平均结果复制20倍作为时态网的初始化。

我的问题是如何取得上述结果?我如何打开caffe模型才能对其进行这些更改?

我读了网络手术指南,但它没有涵盖所需的程序。

谢谢你的帮助!

AMayer

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 18:12:22

净外科教程应该为您提供所需的基本知识,以解决这一问题。但让我更详细地解释一下您需要做的步骤:

  1. 准备.prototxt网络架构:您需要两个文件:现有的ImageNet .prototxt文件和新的时态网络架构。在两个网络中,除了第一个卷积层之外,您应该使所有层相同,包括层的名称。这样,您可以使用ImageNet .caffemodel文件自动初始化权重。 由于第一个conv层的大小不同,您必须在您的.prototxt文件中给它一个与在ImageNet文件中不同的名称。否则,Caffe也会尝试用现有的权重初始化这个层,这将失败,因为它们有不同的形状。(这就是在编辑你的问题时发生的情况。)只需命名它,例如conv1b,并相应地更改对该层的所有引用。
  2. 加载ImageNet网络进行测试,以便从模型文件中提取参数: net =caffe.Net(“Imagenet.Protxt”,“Imagenet.caffemodel”,caffe.TEST)
  3. 从这个加载的模型中提取权重。 conv_1_weights =old_net.params‘’conv1 1‘..data conv_1_biases =old_net.params’‘conv1 1’..data
  4. 平均各通道的权重: conv_av_weights = np.mean(conv_1_weights,axis=1,keepdims=True)
  5. 将新网络与旧的.caffemodel文件一起加载,因为除第一层之外的所有层都直接使用来自ImageNet的权重: new_net =caffe.Net(‘new_network.Protxt’,'imagenet.caffemodel',caffe.TEST)
  6. 为新网络分配计算出的平均权重。 新的net.params‘confl1b’.数据。= conv_av_weights new_net.params‘confl1b’.= conv_1_biases
  7. 将权重保存到一个新的.caffemodel文件中: new_net.save('new_weights.caffemodel')
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41045335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档