Tape Gradient C++

Hi,

Would like to use GradientTape in c++ but cannot find any code sample that demonstrates how to do so.

  • In python:
    with GradientTape as tape:
    tape.watch(x)
    y = x * x

  • In C++: ?

Does anyone have some sample to share?

Best,
Dom

You can find something at:

Hi,

I’m able to create simple operation but seems like some operators are not available in C. Below the Ops I would like to use with Tape

// logprobabilities
    auto softmax = LogSoftmax(root, logitsBufPlc);
    auto onehot = OneHot(root, actionsBufPlc, numActions, 1, 0);
    auto multi = Multiply(root, onehot, softmax);
    auto logprobs = ReduceSum(root, multi, 1);

    // ratio
    auto sub = Subtract(root, logprobs, logProbsBufPlc);
    auto ratio = Exp(root, sub);

    // min advantage
    auto greater = Greater(root, advgBufPlc, 1);
    auto clipmin = Multiply(root, (1 - clipRatio), advgBufPlc);
    auto clipmax = Multiply(root, (1 + clipRatio), advgBufPlc);
    auto minadvg = Where3(root, greater, clipmin, clipmax);
    
    // loss
    auto minv = Min(root, Multiply(root, ratio, advgBufPlc), minadvg);
    auto reducedMean = ReduceMean(root.WithOpName("reduced"), minv, {0, 1});

Here you can find the C++ ops (array, nn, etc…):

https://www.tensorflow.org/api_docs/cc

This operators aren’t compatible with GradientTape in which needs a context as input. Check example below.

Tape tape(/persistent=/false);
tape.Watch(inputs[0]);
AbstractTensorHandle* neg_output;
TF_RETURN_IF_ERROR(ops::Neg(ctx, inputs[0], &neg_output, “Neg”));
tape.RecordOperation(inputs, {neg_output}, nullptr, “Neg”);

For that I think that you need to wait for: