如何在 CAFFE 的新网络中重复使用同一个网络两次
How to reuse same network twice within a new network in CAFFE
我有一个预训练网络(我们称之为 N
)我想在一个新网络中使用两次。任何人都知道如何复制它?然后我想给每个副本分配不同的学习率。
例如(N1
是 N
的第一个副本,N2
是 N
的第二个副本),新网络可能如下所示:
N1 --> [joint ip
N2 --> layer]
我知道如何通过单个副本重用 N
,但是,由于 N1
和 N2
将具有不同的(微调)学习率,我不知道如何才能我制作了 2 份 N
并为每份分配了不同的学习率。
谢谢!
使用同一个网络两次叫做"Siamese network". The way it is implemented in caffe is by explicitly duplicating the network, but using "name"
param for each parameters blob to create a single copy of the underlying parameters. See this prototxt for example。
一旦明确定义网络两次,就可以为每个副本分配不同的 "lr_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
}
}
如果您进行微调,您可能需要进行一些网络手术,以便将原始权重保存在 .caffemodel
文件中,名称为 "ip1_w"
和 "ip1_b"
。
我有一个预训练网络(我们称之为 N
)我想在一个新网络中使用两次。任何人都知道如何复制它?然后我想给每个副本分配不同的学习率。
例如(N1
是 N
的第一个副本,N2
是 N
的第二个副本),新网络可能如下所示:
N1 --> [joint ip
N2 --> layer]
我知道如何通过单个副本重用 N
,但是,由于 N1
和 N2
将具有不同的(微调)学习率,我不知道如何才能我制作了 2 份 N
并为每份分配了不同的学习率。
谢谢!
使用同一个网络两次叫做"Siamese network". The way it is implemented in caffe is by explicitly duplicating the network, but using "name"
param for each parameters blob to create a single copy of the underlying parameters. See this prototxt for example。
一旦明确定义网络两次,就可以为每个副本分配不同的 "lr_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
}
}
如果您进行微调,您可能需要进行一些网络手术,以便将原始权重保存在 .caffemodel
文件中,名称为 "ip1_w"
和 "ip1_b"
。