在 ARM 计算库中初始化张量的正确方法是什么?我没有找到任何有关正确方法的文档。
我的张量包含 float (F32)。我可以通过 buffer() 接口(interface)访问底层数据来直接写入数据,该接口(interface)返回一个指向 uint8_t 的指针。但是,我不确定如何计算数据布局,因为它看起来不连续,即如果我将 4 个 float 写入 4x1 张量,
Tensor x{};
x.allocator()->init(TensorInfo(4, 1, Format::F32));
float xdata[] = {1, 2, 3, 4};
FILE *fd = fmemopen(x.buffer(), 4 * sizeof(float), "wb");
fwrite(xdata, sizeof(float), 4, fd);
fclose(fd);
x.print(std::cout);
打印出来,
1 2 3 1.17549e-38
“x”的前 3 个元素已初始化,但最后一个元素未初始化。如果我将 fwrite 行更改为,
fwrite(xdata, sizeof(float), 6, fd);
那么输出是
1 2 3 4
因此,分配的字节数可能多于 4 个浮点所需的字节数,或者这可能是一些误导性的巧合。不管怎样,这都不是初始化张量值的正确方法。
任何帮助将不胜感激。
最佳答案
从arm计算库文档(v18.08)来看,在您的情况下初始化的正确方法似乎是“import_memory”函数。请参阅此处的示例:https://github.com/ARM-software/ComputeLibrary/blob/master/tests/validation/NEON/UNIT/TensorAllocator.cpp
关于c++11 - 在ARM计算库中初始化张量的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291025/