请问为什么tf.py_function()中自定义的函数未被调用?

发布于 2022-09-12 04:50:01 字数 683 浏览 20 评论 0

TF2.0中,在最大池化层的源码当中使用了tf.py_function(),自定义了一个函数,想将Tensor转为Numpy矩阵从而进行一些操作,然而程序运行时,却将自定义的函数忽略掉了,自定义函数中的print()函数未作输出,返回值为<unknow>,如果py_function()中的参数写错了,系统还是会报错的,说明py_function()这个函数运行了,但是自定义的函数未运行,这是为什么呢,是缺少修饰器么。

def Myshow_all(self,inputs):
    def showTensor(inputs):
        a=inputs.numpy()
        print(a)
        return a
    y=tf.py_function(showTensor,[inputs],tf.float32)
    print(y.shape)
    return y
def _pooling_function(self,inputs,pool_size,strides,padding,data_format):
    output=K.pool2d(inputs,pool_size,strides,padding,data_format,pool_mode='max')
    a=self.Myshow_all(inputs)
    print(a)
    print(a.shape)
    return output

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青瓷清茶倾城歌 2022-09-19 04:50:01

感谢回答问题,问题已经解决。解决方法为在_pooling_function函数上加上@tf.funtion修饰器就可以用了,本人也是自己瞎尝试蒙出来的,个人猜测在静态图的情况下tf.py_function这个函数只能在,被@tf.function修饰器修饰的函数中调用,在Myshow_all上面加入@tf.function在这里是肯定不行的,因为showTensor是Myshow_all的内函数。如果自己搞学术研究的话还是用动态图吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文