在用于图像分类的卷积神经网络体系结构(例如VGG或AlexNet)中,我想比较在测试时间(优选使用Caffe)进行正向传递时计算网络每层结果所花费的时间。
特别值得一提的是,我对卷积层与完全连接的层花费了多少时间。
答案 0 :(得分:0)
另一种方法是创建两个网络,一个只有卷积层,另一个只有密集(完全连接)层。使用卷积网络进行前向传递,测量其时间,将结果(仅卷积网络的输出)传递到完全连接的网络,进行正向传递并测量其时间。
答案 1 :(得分:0)
所以,你有什么问题。 caffe time
没有用?
答案 2 :(得分:0)
如何在net.cpp中使用class caffe::Timer
只是为了您的测试:
#include "caffe/util/benchmark.hpp" //use class caffe::Timer
Dtype Net<Dtype>::ForwardFromTo(int start, int end) {
... //Some original contents
Timer timer;
for (int i = start; i <= end; ++i) {
...//Some original contents
string layer_name = layers_[i]->layer_param().name(); //get layer name
timer.Start();
Dtype layer_loss = layers_[i]->Forward(bottom_vecs_[i], top_vecs_[i]);
float forward_time = timer.MicroSeconds();
LOG(ERROR) << layer_name << " consumes: " << forward_time << " microseconds during forward.";
...
}
return loss;
}
答案 3 :(得分:-1)
每个caffe层在src/caffe/layers
dir中都有前向和后向函数,例如src/caffe/layers/pooling_layer.cpp
是cpu实现,src/caffe/layers/pooling_layer.cu
是gpu实现。所以你需要添加一个时间函数.cpp
或.cu
中的转发函数,具体取决于您使用的是cpu或gpu。
或最简单的方法,使用caffe time
命令