Neural network 如何在CAFFE的新网络中重复使用同一网络两次

Neural network 如何在CAFFE的新网络中重复使用同一网络两次,neural-network,deep-learning,caffe,Neural Network,Deep Learning,Caffe,我有一个预先训练好的网络(我们称之为N),我想在一个新网络中使用两次。有人知道怎么复制吗?然后我想给每个副本分配一个不同的学习速率 例如(N1是N的第一个副本,N2是N的第二个副本),新网络可能看起来像: N1 --> [joint ip N2 --> layer] 我知道如何使用单个副本重复使用N,但是,由于N1和N2具有不同的(微调)学习率,我不知道如何制作两个N副本,并为每个副本分配不同的学习率 谢谢 两次使用同一张网叫做。它在caffe中的实现方式是显式复制网络,但

我有一个预先训练好的网络(我们称之为
N
),我想在一个新网络中使用两次。有人知道怎么复制吗?然后我想给每个副本分配一个不同的学习速率

例如(
N1
N
的第一个副本,
N2
N
的第二个副本),新网络可能看起来像:

N1 --> [joint ip 
N2 -->    layer]
我知道如何使用单个副本重复使用
N
,但是,由于
N1
N2
具有不同的(微调)学习率,我不知道如何制作两个
N
副本,并为每个副本分配不同的学习率


谢谢

两次使用同一张网叫做。它在caffe中的实现方式是显式复制网络,但对每个参数blob使用
“name”
param来创建基础参数的单个副本。请参阅。
一旦显式定义网络两次,就可以为每个副本分配不同的
“lr\u mult”
参数

因此,假设您的参考网络
N
有一个输入层(在本例中我将跳过该层)和一个名为
“ip1”
的内部产品层。然后

 layer {
   name: "ip1_a"
   bottom: "data_a"
   top: "ip1_a"
   type: "InnerProduct"
   inner_product_param {
     num_output: 10
   }
   param {
     name: "ip1_w"  # NOTE THIS NAME!
     lr_mult: 1
   }
   param {
     name: "ip1_b"
     lr_mult: 2
   }
 }
 layer {
   name: "ip1_b"
   bottom: "data_b"
   top: "ip1_b"
   type: "InnerProduct"
   inner_product_param {
     num_output: 10
   }
   param {
     name: "ip1_w"  # NOTE THIS NAME: it's the same!
     lr_mult: 10 # different LR for this branch
   }
   param {
     name: "ip1_b"
     lr_mult: 20
   }
 }
 # one layer to combine them     
 layer {
   type: "Concat"
   bottom: "ip1_a"
   bottom: "ip1_b"
   top: "ip1_combine"
   name: "concat"
 }
 layer {
   name: "joint_ip"
   type: "InnerProduct"
   bottom: "ip1_combine"
   top: "joint_ip"
   inner_product_param {
     num_output: 30
   }
 } 

如果您进行了微调,您可能需要进行一些网络手术,以便将原始wieghts保存在
.caffemodel
文件中,文件名为
“ip1\u w”
“ip1\u b”

谢谢谢了,托达!我确实需要做一些网络手术,谢谢你指出关键词。下面是一个链接,带有一个示例供将来参考。Hi Shai,当我应用这个方法时,我得到了一些意想不到的行为。是否有可能在N1和N2之间共享权重?如果是,有没有办法禁用它?我想N1和N2是N的独立副本。谢谢@user2476373在这种情况下,您可能不需要为参数blob指定名称,只需对整个层使用相同的“名称”,这是行不通的。当我给两个层赋予相同的名称时,加载的值不会同时加载到两个层(不确定是加载到其中任何一个层,还是只加载到第二个层)。无论如何,我解决了这个问题,通过训练暹罗网络的一个单步(学习率为0),给每个重复层一个不同的名称,但让它们共享权重。然后保存此新复制网络的快照,并从此快照初始化网络的权重。再次感谢您的帮助:)@user2476373这是一个很好的解决方法。您可以在python中执行所有这些权重操作