我想在操作期间更改输出张量的基础存储。

我有新数据的原始指针(浮点*)。我想在启动内核并返回之前将输出张量设置为此新数据,以便可以劫持该操作。

但是我对何时删除原始指针感到困惑,因为张量构造似乎是一个浅表拷贝。我只能在所有此张量的使用完成后删除原始指针。但是如何通知我呢?

最佳答案

TensorFlow运行时内部没有用于执行此操作的公共(public)API,但是可以使用C API方法 TF_NewTensor() 从原始指针创建Tensor对象,该方法具有以下签名:

// Return a new tensor that holds the bytes data[0,len-1].
//
// The data will be deallocated by a subsequent call to TF_DeleteTensor via:
//      (*deallocator)(data, len, deallocator_arg)
// Clients must provide a custom deallocator function so they can pass in
// memory managed by something like numpy.
extern TF_Tensor* TF_NewTensor(TF_DataType, const int64_t* dims, int num_dims,
                               void* data, size_t len,
                               void (*deallocator)(void* data, size_t len,
                                                   void* arg),
                               void* deallocator_arg);

在内部,这将创建一个引用计数的 TensorBuffer 对象,该对象获取原始指针的所有权。 (不幸的是,只有C API具有 friend access才能直接从tensorflow::Tensor创建TensorBuffer。这是open issue。)当引用计数降至零时,会使用deallocatordatalen的值调用dellocator_arg函数。

关于c++ - 如何在C++中从原始指针数据构造一个Tensorflow::Tensor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42809657/

10-11 16:08