caffe中是否需要在deploy.prototxt中定义dropout层?
Does the dropout layer need to be defined in deploy.prototxt in caffe?
在caffe中的AlexNet实现中,我在deploy.prototxt文件中看到了以下层:
layer {
name: "drop7"
type: "Dropout"
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
现在 dropout 的关键思想是在训练期间从神经网络中随机丢弃单元(连同它们的连接)。
这是否意味着我可以简单地从 deploy.prototxt 中删除该图层,因为该文件仅供测试期间使用?
是的。测试期间不需要 Dropout。
即使您包含一个 dropout 层,在测试期间也不会发生任何特殊情况。查看dropout forward pass源码:
if (this->phase_ == TRAIN) {
// Code to do something
} else {
caffe_copy(bottom[0]->count(), bottom_data, top_data); //Code to copy bottom blob to top blob
}
如源代码所示,如果底部 blob 数据未处于训练阶段,则会将其复制到顶部 blob 数据内存。
在caffe中的AlexNet实现中,我在deploy.prototxt文件中看到了以下层:
layer {
name: "drop7"
type: "Dropout"
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
现在 dropout 的关键思想是在训练期间从神经网络中随机丢弃单元(连同它们的连接)。
这是否意味着我可以简单地从 deploy.prototxt 中删除该图层,因为该文件仅供测试期间使用?
是的。测试期间不需要 Dropout。
即使您包含一个 dropout 层,在测试期间也不会发生任何特殊情况。查看dropout forward pass源码:
if (this->phase_ == TRAIN) {
// Code to do something
} else {
caffe_copy(bottom[0]->count(), bottom_data, top_data); //Code to copy bottom blob to top blob
}
如源代码所示,如果底部 blob 数据未处于训练阶段,则会将其复制到顶部 blob 数据内存。