2016-05-19 5 views
0

私はcaffeのpythonインターフェイスを使用しています。レイヤーインプリメンテーションファイルsoftmax_loss_layer.cuでは、ミニバッチ内のすべての単一サンプルの損失が合計され、バッチサイズで除算されます。したがって、"softmaxlosslayer"からの出力は、ミニバッチに対する平均損失です。caffeバイナリlibからpythonを呼び出すときにcaffe中間結果を取得

私がしたいのは、*loss_dataに格納されているすべてのサンプルを失うことですが、std::coutまたはfstreamを使用しようとすると、何も起こりません。ですから、私は、PythonからC++を呼び出すときに、C++バイナリlibから出力を得る方法に変わりはないと思います。

ありがとうございました!

答えて

1

caffeはログ用にライブラリを使用しています。何かを出力したい場合は、glogのマクロを使う必要があります。たとえば:

GLOG(INFO) << "something to be printed"; 

あなたのコードを実行しているあなたは、環境変数GLOG_minloglevelがしたいログレベルを含むように設定されていることを確認する必要があります。つまり、レベルがINFOのログを作成した場合は、GLOG_minloglevel=1(または0、ただしそれ以下)を設定する必要があります。

ログの詳細については、this "how to" pageを参照してください。


注:このコードは、GPU上で実行されるため、あなたはそれからの出力を取得していくつかの困難が予想されるかもしれません:あなたはsoftmax_loss_layer.cuコードからの出力を取得しようとしています。デバッグだけの場合は、代わりにsoftmax_loss_layer.cppコードを調整してCPUモードで実行することを検討してください。つまり、設定はcaffe.set_mode_cpu()

+0

ありがとうございました!実際には、私はsoftmax_loss_layer.cuから損失アレイを取得し、それをソートしようとしています。彼らはcaffe_gpu_sortのような機能を持っていないので、並べ替えを助けるために、この.cuファイルで新しい配列を初期化する必要があります。しかし事はうまくいかない、それは常にセグメントの欠陥(コアダンプ)で終わって、私は多分私は.cuファイルの新しいメモリを求めることができないと思う。実装は.cppファイルと.cuファイルの間でかなり異なっており、私が作業しているネットワークはgpu上で実行する必要があります。 –

+0

@XintingQIUあなたが望むものを確実に得るために、CPUで最初に実装してみてください。その後、GPUの実装に移ります。 – Shai

+0

私はサーバーのrootユーザーではないので、自分のアカウントの下にインストールされたカスタムcaffeに取り組んでいます。だから私はログファイルがどこにあるのか分からない(ログファイルが/ tmp /にあるrootユーザーのことを知っている)、私はpythonインターフェイスを使っているので、caffeの--log_dirを設定することはできない。 @Shai –

関連する問題