我为运行在GPU上的TF(带有c ++和cuda内核)编写了一个自定义OP。玩具身份OP运行良好,它依靠tf::Tensor
输入和输出,然后将元素从输入张量复制到输出张量。
但是,当我尝试传递int
输入(单个int
数字)时,出现了分段错误。在REGISTER_OP
声明中,我使用
`.Input( "image_size: int32" )`
,然后在void Compute(OpKernelContext* context) override {
中,我尝试读取此int
参数,首先读取为tf::Tensor
,然后转换为int
。
const Tensor& inn_image_size_T = context->input(0);
auto inn_image_size_Tflat = inn_image_size_T.flat<int>();
int inn_image_size = inn_image_size_Tflat(0);
这符合我在网上找到的示例,例如this one(相关行:46、70)。
已经检查了Op,并且可以在GPU上正常运行而没有最后一行(int inn_image_size = inn_image_size_Tflat(0);
),并且对于张量参数,确实将输入复制到输出。
但是对于int参数,当我尝试从int-Tensor转换为int时,事情可以编译,但是当我运行时,会出现分段错误。
有人暗示为什么会这样吗?
================================================ ==========
=======================================更新:
================================================ ==========
我还打印inn_image_size_T.NumElements()
和inn_image_size_T.size()
进行健全性检查,结果是按预期的1
,因为我只传递了一个数字。因此,信息似乎存在,但是阅读它出乎意料地有问题。