Tensorflow——如何在 py_func 梯度中处理 numpy op 输出?

Tensorflow -- how can I process in numpy op outputs in py_func gradient?

我用这个 link: https://gist.github.com/harpone/3453185b41d8d985356cbe5e57d67342 创建了一个带有梯度的 py_func 函数。这是 Harpone 的代码:

import tensorflow as tf
from tensorflow.python.framework import ops
import numpy as np

def py_func(func, inp, Tout, stateful=True, name=None, grad=None):
    rnd_name = 'PyFuncGrad' + str(np.random.randint(0,1e+8))

    tf.RegisterGradient(rnd_name)(grad)
    g = tf.get_default_graph()
    with g.gradient_override_map({"PyFunc" : rnd_name}):
       return tf.py_func(func, inp, Tout, stateful=stateful, name=name)

def mysquare(x, name=None):
   with ops.op_scope([x], name, "Mysquare") as name:
       sqr_x = py_func(np.square, [x], [tf.float32], name=name, grad=_MySquareGrad)
       return sqr_x[0]

def _MySquareGrad(op, grad):
   x = op.inputs[0] // how can I process this op.inputs[0] in numpy??
   return x*grad*2 // sample gradient

with tf.Session() as sess:
   x = tf.constant([8., 2.])
   y = mysquare(x)

tf.initialize_all_variables().run()

print (x.eval(), y.eval(), tf.gradients(y,x)[0].eval())

我的问题是,我可以通过对第一个输入使用 op.input[0] 对第一个输出使用 op.output[0] 来检索图层的输入和输出。

但是我从 op.output[0] 得到的是一个张量,我想在 python 中使用 numpy 处理它...有什么方法可以将这个张量转换成 numpy py_func?

的 python 渐变环境

使用tf.py_func IE,使用 numpy

平方 x
def _MySquareGrad(op, grad):
   x = op.inputs[0] # how can I process this op.inputs[0] in numpy??
   xx = tf.py_func(np.square, [x], [tf.float32])
   return xx[0]*grad*2 # sample gradient