我想在操作期间更改输出张量的基础存储。
我有新数据的原始指针(浮点*)。我想在启动内核并返回之前将输出张量设置为此新数据,以便可以劫持该操作。
但是我对何时删除原始指针感到困惑,因为张量构造似乎是一个浅表拷贝。我只能在所有此张量的使用完成后删除原始指针。但是如何通知我呢?
最佳答案
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。)当引用计数降至零时,会使用deallocator
,data
和len
的值调用dellocator_arg
函数。关于c++ - 如何在C++中从原始指针数据构造一个Tensorflow::Tensor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42809657/