在c ++中,存储了一个多维矩阵std::vector<float>.我需要在tensorflow中使用它,它使用张量.从a std::vector到张量的转换似乎并不明显.有一个c_api将向量转换为a TF_Tensor而不是Tensor.std::copy也有效,但我想在没有复制的情况下执行转换.
tensorflow::TensorBufferTensorflow 现在可以通过提供您自己的并使用以下构造函数在 C++ API 中执行此操作:
#include <tensorflow/core/framework/tensor.h>
#include <tensorflow/core/framework/types.pb.h>
...
tensorflow::Tensor(tensorflow::DataType type, const TensorShape & shape, TensorBuffer *buf)
Run Code Online (Sandbox Code Playgroud)
由于tensorflow::TensorBuffer是一个抽象类,因此您需要对其进行子类化并自己实现一些方法(也就是说,这很容易做到)。需要注意的一件事:注意我们如何OwnsMemory()返回false. 如果你想使用手动内存管理(malloc/free 或 new/delete),你可以将其设置为 true,然后自己重写析构函数。也就是说,由于您使用的是 a,所以vector我只需将其设置为false并注意不要让缓冲区超出范围。当它这样做时,vector无论如何都会释放自己的内部存储器。
例如;
#include <tensorflow/core/framework/tensor.h>
#include <tensorflow/core/framework/types.pb.h>
...
tensorflow::Tensor(tensorflow::DataType type, const TensorShape & shape, TensorBuffer *buf)
Run Code Online (Sandbox Code Playgroud)
然后,您只需要提供正确的tensorflow::DataType(例如;tensorflow::DT_FLOAT32)和 a tensorflow::TensorShape(您可以实例化它并使用 添加每个维度<TensorShape>.addDim(<the dimension>)。您可以通过存储std::vector内部然后通过使用.data()和强制转换来公开内容来修改上面的内容void*以创建构造函数因为MyBuffer它需要一个向量。或者你可以在 之外自己做这件事MyBuffer。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |