将可变大小的张量流张量转换为C+中的std::vector+; < P> >我有一个给定的C++ TysFooSurviv::张量< /代码>(变量形状)对象.< /P>
我想把它转换成一个将可变大小的张量流张量转换为C+中的std::vector+; < P> >我有一个给定的C++ TysFooSurviv::张量< /代码>(变量形状)对象.< /P>,c++,tensorflow,C++,Tensorflow,我想把它转换成一个std::vector(在多维向量的情况下是嵌套向量) 有没有干净的方法可以做到这一点 谢谢 不是真的,不是 您可以创建一个向量,并嵌套这些向量,但是使用这些向量的代码将非常混乱 如果在编译时知道要对哪些形状进行操作,可以使用 temlate<size_t N, typename T> struct tensor_traits { using type = std::vector<tensor_traits<N-1, T>::type>
std::vector
(在多维向量的情况下是嵌套向量)
有没有干净的方法可以做到这一点
谢谢 不是真的,不是
您可以创建一个向量
,并嵌套这些向量,但是使用这些向量的代码将非常混乱
如果在编译时知道要对哪些形状进行操作,可以使用
temlate<size_t N, typename T>
struct tensor_traits {
using type = std::vector<tensor_traits<N-1, T>::type>;
}
template<typename T>
struct tensor_traits<0, T> {
using type = T;
}
template<size_t N, typename T>
tensor_traits<N, T>::type toVector(const tensorflow::Tensor & input)
{
assert(/* shape and type match */);
tensor_traits<N, T>::type result;
for(size_t i = 0; i < input.dim_size(0); ++i)
{
result.push_back(toVector<N-1, T>(input[i]));
// Or however you get a smaller Tensor from a larger one. The documentation is unclear
}
return result;
}
template<typename T>
T toVector<0, T>(const T & input)
{
return input;
// Base case of single value
}
temlate
结构张量{
使用type=std::vector;
}
模板
结构张量{
使用类型=T;
}
模板
tensor_traits::type to向量(常量tensorflow::tensor&input)
{
断言(/*形状和类型匹配*/);
张量特征::类型结果;
对于(大小i=0;i
好吧,我需要将张量插入另一个代码中,该代码使用std嵌套向量。。。如果我有一个简单的迭代器,那么我需要先验地知道维度,以保持我假设的维度。你有像void doStuff(vector&input)
这样的函数吗?你可以做一个函数,将特定形状的张量转换成该形状的向量,但这不是一般的是的,你是对的。对于迭代器,For(auto-it=std::begin(Y_pred);it!=std::end(Y_pred);++it){…}
对我不起作用Y_pred
是一个张量流张量。你想用这个向量实现什么?你知道张量有多少维吗?否则,如果不使用某种多态性,甚至无法命名向量的类型,这将使一切变得复杂。