GPU上的TF自定义操作-张量输入正常,int输入失败

时间:2018-07-31 16:25:26

标签: python tensorflow casting operator-overloading

我为运行在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,因为我只传递了一个数字。因此,信息似乎存在,但是阅读它出乎意料地有问题。

0 个答案:

没有答案