バッチモードでC++で事前計算されたCNNを使用して複数のサンプルを分類したいとします。これまでのところ:私はPythonでKerasとCNNモデルを訓練し、が提供する小さなスクリプトを使用して、このモデルを変えたSession :: Run(TensorFlow C++ API)を使用してバッチモードでサンプルのCNNベースの分類を実行する方法
と
ReadBinaryProto
関数を使用してモデルをロードし、Session
オブジェクトを作成しました。
入力テンソルのn
の分類を実行したいと思います。次のコードは動作しますが、(〜20msec)での実行がかなり高速ですが、約20,000回実行する必要があるため、かなり遅いです。
std::vector<tensorflow::Tensor> outputs;
std::vector<tensorflow::Tensor> tensor(tensorflow::DT_FLOAT,
tensorflow::TensorShape({1, winSize, winSize, nochannels }));;
for (unsigned int n = 0; n < noSamples; n++)
{
copyDataToTensor(prevImg, prevPoints[n], input_tensor, 0);
tensorflow::Status run_status = m_Session->Run({ { "conv2d_5_input", tensor} }, { "output_node0" }, {}, &outputs);
... evaluate outputs ...
}
winSize
とnoChannels
は次にCNN入力形状に関連するいくつかの定数です。
は、私は何を探していますと、のようなバッチモードで複数のサンプルを実行するためのアプローチです:
std::vector<tensorflow::Tensor> outputs;
std::vector<tensorflow::Tensor> tensor(tensorflow::DT_FLOAT,
tensorflow::TensorShape({noSamples, winSize, winSize, nochannels }));;
for (unsigned int n = 0; n < noSamples; n++)
{
copyDataToTensor(prevImg, prevPoints[n], input_tensor, n);
}
tensorflow::Status run_status = m_Session->Run({ { "conv2d_5_input", tensor} }, { "output_node0" }, {}, &outputs);
... evaluate outputs ...
しかし、このアプローチはoutputs
ので、動作していない一つの要素だけであり、このテンソルのためのコンテンツが格納され唯一の分類結果の結果。
noSamples
回{"ouput_node0"}
のベクターを提供することは、同様に機能しません。そしてoutputs
テンソルベクトルは正しいサイズを持ちますが、各テンソルは似ています。
この機能を正しく使用して、バッチモードで予測を実行するにはどうすればよいですか?私はその問題のために使用しなければならない別のインターフェイスがありますか?