이미지 분류 (예 : VGG 또는 AlexNet)를위한 길쌈 신경 네트워크 아키텍처에서 네트워크의 각 레이어 결과를 계산하는 데 걸리는 시간을 비교하고 싶습니다. 테스트 시간에 순방향 패스 (preferebly Caffe 사용).CNN에서 각 레이어의 실행 시간을 측정하는 방법
특히, 나는 전체 연결 레이어에 비해 길쌈 레이어에 얼마나 많은 시간을 소비하는지에 관심이 있습니다.
이미지 분류 (예 : VGG 또는 AlexNet)를위한 길쌈 신경 네트워크 아키텍처에서 네트워크의 각 레이어 결과를 계산하는 데 걸리는 시간을 비교하고 싶습니다. 테스트 시간에 순방향 패스 (preferebly Caffe 사용).CNN에서 각 레이어의 실행 시간을 측정하는 방법
특히, 나는 전체 연결 레이어에 비해 길쌈 레이어에 얼마나 많은 시간을 소비하는지에 관심이 있습니다.
모든 CAFFE 층 src/caffe/layers/pooling_layer.cu
는 당신에 따라 .cpp
또는 .cu
순방향 함수의 시간 함수를 추가 할 필요 implementation.So GPU가, 예 src/caffe/layers/pooling_layer.cpp
의 CPU 구현은, src/caffe/layers
DIR의 전후 기능을 갖는다 CPU 또는 GPU를 사용하고 있습니다. caffe time
명령
는 두 네트워크 만 길쌈 레이어가 하나 밖에 밀도 (완전히 연결) 레이어가 하나를 만들 것하고 또 다른 방법을 사용하여
또는, 가장 간단한 방법. 길쌈 네트워크를 사용하여 순방향 패스를하고, 시간을 측정하고, 결과 (길쌈 네트워크 만의 출력)를 완전히 연결된 네트워크로 전달하고, 순방향 패스를하고 시간을 측정합니다.
그래서, 무엇이 문제입니까? caffe time
가 작동하지 않습니까?
무엇 그냥이 같은 테스트를위한 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;
}