gpt4 book ai didi

c++ - 在 tensorflow c++ 中是否有等同于 tf.convert_to_tensor 的东西?

转载 作者:行者123 更新时间:2023-11-30 03:21:13 24 4
gpt4 key购买 nike

我有 mean.npy 文件,我必须将其转换为张量。我发现 tf.convert_to_tensor 可以做到这一点,但在 C++ 中找不到它的等价物。有人知道 C++ 中的等效函数吗?

最佳答案

没有提供读取 .npy 的方法文件到 tensorflow::Tensor .首先,您需要阅读文件,这不是微不足道的,但也不是太难,请查看 NPY format documentation .一旦你有了它,最简单的事情就是将数据复制到张量:

// Existing NPY reading function, assuming float type
bool read_npy(const char* file, std::vector<float>& npy_values, std::vector<int64_t>& shape);
// Read file
std::vector<float> npy_values;
std::vector<int64_t> shape;
if (!read_npy("data.npy", npy_values, shape))
{
// error...
}
// Make tensor
tensorflow::TensorShape tensorShape;
for (int64_t dim : shape)
{
tensorShape.AddDim(dim);
}
tensorflow::Tensor tensor(DT_FLOAT, tensorShape);
// Copy data
std::copy(npy_values.begin(), npy_values.end(), tensor.flat<float>().data());
// Or with memcpy
std::memcpy(tensor.flat<float>().data(), npy_values.data(), tensor.NumElements() * sizeof(float));

请注意,这假设 NPY 数据缓冲区像 TensorFlow 张量一样按行优先顺序排列,我想 IsAligned() 对于张量应该是正确的,尽管 afaik 对于新张量应该总是正确的。

另一种选择是先创建张量,然后使用其缓冲区 (tensor.flat<float>().data()) 写入读取值。然而,这需要更多的工作,因为您需要首先读取文件中张量的形状(或预先修复它),创建张量,然后将文件读入其缓冲区(在这种情况下,读取函数将接收一个指针而不分配任何内存)。

编辑:我刚刚意识到你说“假设我有一个实用函数来读取 .npy 文件并且它返回一个指向数组的浮点指针”,而不是一个 vector 。那么思路应该是一样的,你仍然可以使用memcpycopy喜欢:

std::copy(npy_ptr, npy_ptr + tensor.NumElements(), tensor.flat<float>().data());

关于c++ - 在 tensorflow c++ 中是否有等同于 tf.convert_to_tensor 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com