我为在GPU上运行的TF(使用c++和cuda内核)编写了一个定制的OP。toy identity 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张量转换为int张量时,会编译一些东西,但当我运行时,会出现分段错误。你知道吗
有什么线索说明为什么会这样吗?你知道吗
=====================================================================
=============================================更新:
=====================================================================
我还为健全性检查打印inn_image_size_T.NumElements()
和inn_image_size_T.size()
,结果是1
,因为我只传递一个数字。因此,信息似乎在那里,但阅读它是出人意料的问题。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐