如何测量CNN中各层的执行时间

时间:2016-08-18 08:32:30

标签: conv-neural-network

在用于图像分类的卷积神经网络体系结构(例如VGG或AlexNet)中,我想比较在测试时间(优选使用Caffe)进行正向传递时计算网络每层结果所花费的时间。

特别值得一提的是,我对卷积层与完全连接的层花费了多少时间。

4 个答案:

答案 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命令