Caffe Net Surgery 是否需要微调?
Is Caffe Net Surgery requires fine tuning?
我是 Caffe 的新手,我想将已经训练好的 caffeNet 模型与 ImageNet 一起使用。我通过删除卷积中间 conv4 层来应用网络手术。
'layer {
name: "relu3"
type: "ReLU"
bottom: "conv3"
top: "conv3"
}
layer {
name: "relu5-new"
type: "ReLU"
bottom: "conv5-new"
top: "conv5-new"
}
layer {
name: "pool5-new"
type: "Pooling"
bottom: "conv5-new"
top: "pool5-new"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5-new"
top: "fc6"
inner_product_param {
num_output: 4096
}
}'
Full of prototxt file can be found here
保存这个新网络后准确率变为0。我应该对ImageNet验证集进行微调,还是我的新prototxt文件有问题?
任何帮助将不胜感激!
您开始使用的原始网络在 conv3
和 conv5
之间有 conv4
:这意味着 conv5
的过滤器(权重)需要一定数量的输入和某些 "order" 或 "meaning" 的输入。删除 conv4
后,您必须更改 conv5
以接受不同数量的输入。因此,必须训练新的 conv5
层 以适应它接收到的新输入。
在这种情况下,当你引入一个新的 conv5
层时,你应该在你的 prototxt 中定义 weight_filler
来指导 caffe 如何初始化新的权重。否则 caffe 会将权重设置为零,在这种情况下几乎不可能进行微调。
我是 Caffe 的新手,我想将已经训练好的 caffeNet 模型与 ImageNet 一起使用。我通过删除卷积中间 conv4 层来应用网络手术。
'layer {
name: "relu3"
type: "ReLU"
bottom: "conv3"
top: "conv3"
}
layer {
name: "relu5-new"
type: "ReLU"
bottom: "conv5-new"
top: "conv5-new"
}
layer {
name: "pool5-new"
type: "Pooling"
bottom: "conv5-new"
top: "pool5-new"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5-new"
top: "fc6"
inner_product_param {
num_output: 4096
}
}'
Full of prototxt file can be found here
保存这个新网络后准确率变为0。我应该对ImageNet验证集进行微调,还是我的新prototxt文件有问题?
任何帮助将不胜感激!
您开始使用的原始网络在 conv3
和 conv5
之间有 conv4
:这意味着 conv5
的过滤器(权重)需要一定数量的输入和某些 "order" 或 "meaning" 的输入。删除 conv4
后,您必须更改 conv5
以接受不同数量的输入。因此,必须训练新的 conv5
层 以适应它接收到的新输入。
在这种情况下,当你引入一个新的 conv5
层时,你应该在你的 prototxt 中定义 weight_filler
来指导 caffe 如何初始化新的权重。否则 caffe 会将权重设置为零,在这种情况下几乎不可能进行微调。