Python 由于张量id,将numpy数组转换为张量时出现奇怪错误

Python 由于张量id,将numpy数组转换为张量时出现奇怪错误,python,numpy,tensorflow,keras-layer,Python,Numpy,Tensorflow,Keras Layer,我编写了一个代码来合成一些人脸图像,我有一个自定义层,它的任务是提取FaceNet嵌入,这样我可以在丢失函数中除了图像本身之外使用这些嵌入,但我得到了以下错误: tensorflow.python.framework.errors_impl.InvalidArgumentError: transpose expects a vector of size 0. But input(1) is a vector of size 4 [[{{node training/Adam/gradie

我编写了一个代码来合成一些人脸图像,我有一个自定义层,它的任务是提取FaceNet嵌入,这样我可以在丢失函数中除了图像本身之外使用这些嵌入,但我得到了以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: transpose expects a vector of size 0. But input(1) is a vector of size 4
     [[{{node training/Adam/gradients/conv2d/Conv2D_grad/Conv2DBackpropInput-2-TransposeNHWCToNCHW-LayoutOptimizer}}]]
为简单起见,让我们以只返回其输入的方式定义自定义层:

class my_layer(Layer):

  def __init__(self, **kwargs):
    super(my_layer, self).__init__(**kwargs)

  def call(self, x):
    y = tf.py_function(my_func,[x], Tout = tf.float32)
    y.set_shape((None, 160, 160, 3))
    return y

def my_func(x):
    y1 =x
    x = x.numpy()
    y2 = tf.convert_to_tensor(x, dtype=tf.float32)
    return y2

如果我返回y2,我会得到相同的错误,但如果我返回y1,一切都会好起来。这真的很奇怪,如果你返回输入张量,没有错误,但是如果你把它转换成一个numpy数组,然后你把它转换回张量,它就会抛出这个错误。我想当我将输入张量转换为数组时,会遗漏一些东西。我检查了输入张量的id并创建了张量y2。他们是不同的。也许是因为这个,但我不知道如何改变张量的id。但这对我来说真的很奇怪

正如我提到的,一定有一些东西与张量的id有关。所以我用这种方式编辑了我的函数:

def my_func(x):
    y1 = x
    y2 = x
    x = x.numpy()
    y2 = tf.convert_to_tensor(x, dtype=tf.float32) + y2 - y1
    return y2
因此,我们已经将y2的id设置为与x相同的id,所以它工作了。但是如果y2修改了x的形状,你可以得到(y2-y1)的tf.reducede_平均值!这是保存输出张量id的一种非常不寻常的方法,但是如果您知道如何访问张量id,我将非常感激。例如,您可以使用print([y2])检查您的张量id