TensorFlow-(一)

2326 ワード

一、TensorFloweliteを使ってiOSカスタムバージョンを構築する
  • TensorFlowliteによって提供されたcocococoappodsバージョンはiOS 9に対応しています.したがって、手動でソースコードをコンパイルする必要があります.静的パッケージを構築し、iOS 8以上のシステムをサポートします.
  • TensorFlowは現在swiftとOCをサポートしています.直接的なcocapadsを使って統合したいならば.
  • 二、iOSでC++apiを使う
  • appiを使う前にlite版のmodelを用意しておく必要があります.modelトレーニングが完了したらliteに変換すればいいです.
  • modelをロードするクラス:
  • 
    class FlatBufferModel {
     public:
      // Builds a model based on a file.
      // Caller retains ownership of `error_reporter` and must ensure its lifetime
      // is longer than the FlatBufferModel instance.
      // Returns a nullptr in case of failure.
      static std::unique_ptr BuildFromFile(
          const char* filename,
          ErrorReporter* error_reporter = DefaultErrorReporter());
     
      // Builds a model based on a pre-loaded flatbuffer.
      // Caller retains ownership of the buffer and should keep it alive until
      // the returned object is destroyed. Caller also retains ownership of
      // `error_reporter` and must ensure its lifetime is longer than the
      // FlatBufferModel instance.
      // Returns a nullptr in case of failure.
      // NOTE: this does NOT validate the buffer so it should NOT be called on
      // invalid/untrusted input. Use VerifyAndBuildFromBuffer in that case
      static std::unique_ptr BuildFromBuffer(
          const char* caller_owned_buffer, size_t buffer_size,
          ErrorReporter* error_reporter = DefaultErrorReporter());
    }
    
  • C++modelをロードするステップ
  • FlatBuffer Modelを構築し、構築されたFlatBuffer ModelからInterpreterの例を初期化する.Tensorの最適化を選択的に行うことができる.Tensorの値を設定します.運転推理を呼び出します.Tensorの出力値を読み取るには、Interpreterオブジェクトの注意事項を使います.Tensorは整数値で表しています.文字列での比較を避けるために.Interpreterにアクセスすると、複数スレッド中での同時アクセスを避けることができます.Tensorの入力と出力メモリの割り当てはAllocateTensors()を使ってリセットサイズ後に行います.
    
    
    tflite::FlatBufferModel model(path_to_model);
     
    tflite::ops::builtin::BuiltinOpResolver resolver;
    std::unique_ptr<:interpreter> interpreter;
    tflite::InterpreterBuilder(*model, resolver)(&interpreter);
     
    // Resize input tensors, if desired.
    interpreter->AllocateTensors();
     
    float* input = interpreter->typed_input_tensor(0);
    // Fill `input`.
     
    interpreter->Invoke();
     
    float* output = interpreter->typed_output_tensor(0);