画像分類(例えばVGGまたはAlexNet)の畳み込みニューラルネットワークアーキテクチャでは、ネットワークの各レイヤの結果を計算するのにかかる時間を比較したいと思います。テスト時間に前方通過する(あらかじめCaffeを使用)。CNNの各レイヤの実行時間を測定する方法
特に、畳み込みレイヤーと完全接続レイヤーにどれだけの時間を費やしているのですか?
画像分類(例えばVGGまたはAlexNet)の畳み込みニューラルネットワークアーキテクチャでは、ネットワークの各レイヤの結果を計算するのにかかる時間を比較したいと思います。テスト時間に前方通過する(あらかじめCaffeを使用)。CNNの各レイヤの実行時間を測定する方法
特に、畳み込みレイヤーと完全接続レイヤーにどれだけの時間を費やしているのですか?
すべてのカフェ層は、例えばsrc/caffe/layers/pooling_layer.cpp
ため、src/caffe/layers
ディレクトリで前方と後方の機能を持つCPUの実装で、src/caffe/layers/pooling_layer.cu
はあなたに応じて、あなたが.cpp
または.cu
にフォワード機能で時間関数を追加する必要がimplementation.So GPUでありますCPUまたはGPUを使用しています。 caffe time
コマンド
それは2つのネットワークのみ畳み込み層を有する唯一の密集(完全に接続された)層を有するものを作成することで実行する別の方法を使用して
又は、最も簡単な方法、。畳み込みネットワークを使用して順方向パスを行い、その時間を測定し、結果(畳み込み専用ネットワークの出力)を完全に接続されたネットワークに渡し、順方向パスを行い、その時間を測定する。
だから、あなたは何の問題ですか? 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;
}