Python 属性错误:';张量';对象没有属性';numpy';在自定义模型中

Python 属性错误:';张量';对象没有属性';numpy';在自定义模型中,python,numpy,tensorflow,attributeerror,Python,Numpy,Tensorflow,Attributeerror,我使用tensorflow 2.1.0来构建一个模型,当我构建一个需要将数组转换为numpy数组的自定义层时,出现了问题。我清楚地记得aTensor.numpy()是一个真实的东西,所以它一定是我做错了什么,有人能告诉我如何修复它吗?我还是tensorflow上的一个新手 以下是代码(代码是关于一个层,而不是整个模型): 如果有其他方法可以在tensorflow模型中插入numpy代码,请告诉我。在tensorflow 2.0中,有两种类型的对象Tensor和Tensor。只有急切Tensor有

我使用tensorflow 2.1.0来构建一个模型,当我构建一个需要将数组转换为numpy数组的自定义层时,出现了问题。我清楚地记得aTensor.numpy()是一个真实的东西,所以它一定是我做错了什么,有人能告诉我如何修复它吗?我还是tensorflow上的一个新手

以下是代码(代码是关于一个层,而不是整个模型):


如果有其他方法可以在tensorflow模型中插入numpy代码,请告诉我。

在tensorflow 2.0中,有两种类型的对象Tensor和Tensor。只有急切Tensor有与之相关联的numpy()方法,而急切Tensor的值在运行时随时可用,例如tf.ones(2,3)将创建一个急切Tensor,因为我们知道它的值,对它执行的任何操作都将给出一个急切Tensor。在层定义期间的代码中,调用方法的参数“inputs”是一个法线张量,其值仅在图形执行期间(向前传递)已知,因此不能对其调用numpy方法。在tensorflow的向前传递过程中,您应该只使用tensor进行操作,但不能在tensor和numpy数组之间进行交替(这使得backprop的跟踪图不可能)

感谢您的分享,真的很有帮助。现在看来,我必须找到另一种方法来完成这个模型……我想知道我是否能再次获得这个模型设计的文凭(`crmk_`)━・~~
class CIN_Layer(tf.keras.layers.Layer):
    def __init__(self, in_shape):
        super(CIN_Layer, self).__init__()
        self.in_shape = in_shape

    #this is the custom part
    def get3DTensor(self, inputs, lastLayerOutput=None):
        print(type(inputs))
        inputs = inputs.numpy()#FIX HERE: problem occurs here

        interaction = []
        if lastLayerOutput == None:
            lastLayerOutput = inputs.copy()
        else:
            lastLayerOutput = lastLayerOutput.numpy()

        for i in range(inputs.shape[0]):
            interaction.append(np.dot(inputs[i].reshape([-1,1]), lastLayerOutput[i].reshape([1,-1])))

        return tf.convert_to_tensor(np.array(interaction))

    def build(self, input_shape):
        self.kernel = self.add_weight('CIN_kernel', shape=[self.in_shape[-1] for i in range(3)])

    def call(self, inputs, lastLayerOutput=None):
        interaction = self.get3DTensor(inputs, lastLayerOutput)

        return tf.reduce_sum(tf.matmul(inputs, self.kernel))
inputs = tf.keras.layers.Input(shape=(5,10))
cin_layer = CIN_Layer(in_shape=(5,10))
lastLayerOutput = cin_layer(inputs) 
output = tf.keras.layers.Dense(1)(lastLayerOutput)  

model = tf.keras.Model(inputs=inputs, outputs=output)  
model.compile(loss='mean_squared_error', optimizer=optimizer)  
model.summary()