2017-06-21 9 views
0

私は元々はPythonで書かれたfacenet classifierをC++に実装しようとしていましたが、ほとんどの場合うまく動作します。私はopencvで画像を読み込んでテンソルフローテンソルに変換しましたが、グラフを実行した後、出力テンソルはNaN値で埋められます。C++のTensorflow Facenetクラシファイア

HERESにコードセクション:

string input_layer = "input:0"; 
string phase_train_layer = "phase_train:0"; 
string output_layer = "embeddings:0"; 

tensorflow::Tensor input_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({input_Images.size(), height, width, channels})); 
auto input_tensor_mapped = input_tensor.tensor<float, 4>();   

for (int i = 0; i < input_Images.size(); i++) { 
    Mat image = input_Images[i]; 
    const float * source_data = (float*) image.data; 
    for (int h = 0; h < image.rows; ++h) { 
     const float* source_row = source_data + (h * image.cols * image.channels()); 
     for (int w = 0; w < image.cols; ++w) { 
      const float* source_pixel = source_row + (w * image.channels()); 
      for (int c = 0; c < image.channels(); ++c) { 
       const float* source_value = source_pixel + c; 
       //std::cout << *source_value << std::endl; 
       input_tensor_mapped(i, h, w, c) = *source_value; 
      } 
     } 
    } 
} 

tensorflow::Tensor phase_tensor(tensorflow::DT_BOOL, tensorflow::TensorShape()); 
phase_tensor.scalar<bool>()() = false; 

    cout << phase_tensor.DebugString() << endl; 
    cout << input_tensor.DebugString() << endl; 
std::vector<tensorflow::Tensor> outputs; 

std::vector<std::pair<string, tensorflow::Tensor>> feed_dict = { 
    {input_layer, input_tensor}, 
    {phase_train_layer, phase_tensor}, 
};  

Status run_status = session->Run(feed_dict, 
          {output_layer}, {} , &outputs); 
if (!run_status.ok()) { 
    LOG(ERROR) << "\tRunning model failed: " << run_status << "\n"; 
    return -1; 
} 

cout << outputs[0].DebugString() << endl; 

すべてのアイデア、なぜこのようなケースかもしれませんか?

答えて

0

何らかの理由で、の代わりに真のに設定すると、の結果がnon-Nan出力になりました。これは元のPythonコードと同じですが、これはに設定されています。です。

私はなぜこれを更新するのでしょうか?

関連する問題