gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:41:49 28 4
gpt4 key购买 nike

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

例如(N1N 的第一个副本,N2N 的第二个副本) ,新网络可能如下所示:

N1 --> [joint ip 
N2 --> layer]

我知道如何通过单个副本重用 N,但是,由于 N1N2 将具有不同的(微调)学习率,我不知道如何制作 2 个 N 副本并为每个副本分配不同的学习率。

谢谢!

最佳答案

使用同一个网络两次称为 "Siamese network" 。它在 caffe 中的实现方式是显式复制网络,但使用每个参数 blob 的“name”参数来创建底层参数的单个副本。请参阅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
}
}

如果进行微调,您可能需要进行一些网络手术,以便将原始权重保存在名为 "ip1_w".caffemodel 文件中和“ip1_b”

关于neural-network - 如何在 CAFFE 的新网络中重复使用同一网络两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983627/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com