Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

TensorFlow Liteに、SubGraphクラスを導入か?


TensorFlow Liteで、SubGraphクラスが導入されている。


InterpreterクラスからこのSubGraphクラスへ実装を移動させたみたい。。。

Interpreterクラスでは、このSubGraphクラスのメソッドを呼ぶようになっている。

こんな感じに
TfLiteStatus Interpreter::Invoke() {
  TfLiteStatus status = primary_subgraph().Invoke();

  if (!allow_buffer_handle_output_) {
    for (int tensor_index : outputs()) {
      primary_subgraph().EnsureTensorDataIsReadable(tensor_index);
    }
  }

現時点では、SubGraphクラスのインスタンスは、1つしか持てないようですが、
今後は複数のSubGraphクラスのインスタンスが持てるようになるのでしょうね。

SubGraphクラスのInvokeメソッドの中では、OpInvokeメソッドを呼んでいます。
    if (OpInvoke(registration, &node) == kTfLiteError) {
      status = ReportOpError(context_, node, registration, node_index,
                             "failed to invoke");
    }

OpInvokeメソッドは、
  TfLiteStatus OpInvoke(const TfLiteRegistration& op_reg, TfLiteNode* node) {
    if (op_reg.invoke == nullptr) return kTfLiteError;
    return op_reg.invoke(context_, node);
  }

各Op対応するコードを呼んでいます。