我大致知道网络的输出是在net.cpp Init
中定义的。
void Net<Dtype>::Init(const NetParameter& in_param)
确切地在第240行。
// In the end, all remaining blobs are considered output blobs.
for (set<string>::iterator it = available_blobs.begin();
it != available_blobs.end(); ++it) {
LOG_IF(INFO, Caffe::root_solver())
<< "This network produces output " << *it;
net_output_blobs_.push_back(blobs_[blob_name_to_idx[*it]].get());
net_output_blob_indices_.push_back(blob_name_to_idx[*it]);
}
我有一个使用Inception Net的自定义网络,用于更快的rcnn方法。
我的网络有五个用于RPN的卷积层。 然后,RCNN具有两个初始层和一个FC层。
现在的问题是在输出中考虑了第二个起始层。 日志文件显示为
I1129 13:21:48.189395 24653 net.cpp:243] This network produces output loss_bbox
I1129 13:21:48.189399 24653 net.cpp:243] This network produces output loss_cls
I1129 13:21:48.189404 24653 net.cpp:243] This network produces output rpn_cls_loss
I1129 13:21:48.189407 24653 net.cpp:243] This network produces output rpn_loss_bbox
I1129 13:21:48.189411 24653 net.cpp:243] This network produces output tower_2/conv
I1129 13:21:48.189415 24653 net.cpp:243] This network produces output tower_2/tower1/conv1_1
I1129 13:21:48.189419 24653 net.cpp:243] This network produces output tower_2/tower2/conv2_2
我不明白为什么第二个盗用层被视为输出。
我的网络体系结构出了什么问题?
可以看到我的整个网络here。
答案 0 :(得分:0)
您的第二个起始层的最终输出是ReLU激活:
layer {
name: "tower_2/tower2/conv2_2_relu"
type: "ReLU"
bottom: "tower_2/tower2/conv2_2"
top: "tower_2/tower2/conv2_2"
}
哪个产生top
的{{1}}。此顶部未作为底部连接到任何其他层,因此自动视为输出。