TensorFlowの日本語まとめ

TensorFlowの公式サイトに書かれている英文を英語ど素人が翻訳(日本語訳/和訳)します。 間違いがありましたら、優しく教えていただけますと幸いです。 内容を理解したら、使ってみたい。

2.OP用のカーネルを実装

あなたがインターフェイスを定義した後OP一つ以上の実装を提供しますOpKernelを拡張し、Computeメソッドをオーバーライドするクラスを作成し、これらのカーネルの1つを作成します。Computeメソッドを使用すると、入力と出力のセンサーのような便利なものにアクセスできるタイプのOpKernelContext*のcontext引数を、提供します。 

f:id:TensorFlow:20151227082829j:plain

スポンサーリンク

 


上記で作成したファイルにカーネルを追加します。カーネルは、次のようになります。

#include "tensorflow/core/framework/op_kernel.h"

using namespace tensorflow;

class ZeroOutOp : public OpKernel {
 public:
  explicit ZeroOutOp(OpKernelConstruction* context) : OpKernel(context) {}

  void Compute(OpKernelContext* context) override {
    // Grab the input tensor
    const Tensor& input_tensor = context->input(0);
    auto input = input_tensor.flat<int32>();

    // Create an output tensor
    Tensor* output_tensor = NULL;
    OP_REQUIRES_OK(context, context->allocate_output(0, input_tensor.shape(),
                                                     &output_tensor));
    auto output = output_tensor->template flat<int32>();

    // Set all but the first element of the output tensor to 0.
    const int N = input.size();
    for (int i = 1; i < N; i++) {
      output(i) = 0;
    }

    // Preserve the first input value if possible.
    if (N > 0) output(0) = input(0);
  }
};

あなたのカーネルを実装した後あなたはTensorFlowシステムに登録します。登録では、このカーネルの実行に使用される別の制約を指定しますたとえば、CPUのために作られたカーネルおよびGPUのための別のものを持っている可能性があります

 

 ZeroOut OPのためにこれを行うには、zero_out.cc以下を追加します。

REGISTER_KERNEL_BUILDER(Name("ZeroOut").Device(DEVICE_CPU), ZeroOutOp);

 

(原文)

Adding a New Op