实现,CppFlow2是一个Tensorflow C API的套娃
使用这个框架我本来是拒绝的,但是遇到
TensorFlow 2.4.0 C-API 函数 TF_StringDecode、TF_StringEncode 和 TF_StringEncodedSize 不再被使用,现已移除;关于 C 语言中的字符串访问/修改,请参见core/platform/ctstring.h。
这个消息后,原本的一个项目用的是CppFlow1最高支持到TF2.3.1,这就拉夸了,于是研究了一下CppFlow2,这个阔以支持到最新的TF2.4.0,使用了一下跑通后,发现,嗯嗯嗯,真香~比原版的直接使用C API方便多了
弄了好久终于弄出自定义输入vector类型的GPU张量了
需要一点小技巧,目前没有更好的办法,这里仅仅是抛砖引玉
原本的cppflow::fill这个函数只能生成批量是x的Gpu张量,各个数字不能改
而cppflow::tensor虽然可以自定义,但是却是Cpu张量
std::vector<int32_t>ids = { 1,17,61,2,17,61,2,14,136,2,23,116,2,6,36,1,218 };
int64_t dim = static_cast<int64_t>(ids.size());
printf("---------------------------------------------------\n");
printf("input dim len:%d", dim);
//std::vector<int> _data = { 1,2,3 };
auto input_ids = cppflow::tensor(ids, { dim });
auto zero = cppflow::fill({ dim }, (int32_t)0);
input_ids = cppflow::add(input_ids, zero);
std::cout << input_ids << std::endl;
通过以上代码,我把cpu张量加一个全〇张量后,获得一个值大小和原来一致的Gpu张量了
另外,获取张量的shape好像也和官方教程有所出路,
我实验的结果是:
auto shape_tensor=AuData.shape();
auto shape = shape_tensor.get_data<int64_t>();
这里shape数组应该用的int64_t而不是int32_t,否则闪退。获取的shape变量为一个vector<int64_t>,非常友好了!其他的张量维度变化、类型变化官方教程都有,不再细述
PS:Ads时间,大家可以加群一起探讨一下各种深度学习或者图形框架,集思广益,群号:558174476(游戏与人工智能生命体)