当前位置: 首页 > 工具软件 > cppflow > 使用案例 >

【CppFlow2 Tensor变化】

易镜
2023-12-01

实现,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(游戏与人工智能生命体)

 类似资料: