Python 在Keras中,是否可以在以下自定义层中再次使用神经网络的输入?

Python 在Keras中,是否可以在以下自定义层中再次使用神经网络的输入?,python,tensorflow,keras,Python,Tensorflow,Keras,对于网络末端的个人层,我再次需要第一层的输入。是否可以使用相同的输入两次? 在最后一个个人层中,我需要模型的输入,其中包含 a、 b和c做最后的矩阵乘法。问题是矩阵在每一步都会改变,因为a、b和c总是不同的 class PersonalLayer(Layer): def __init__(self): super(PersonalLayer, self).__init__() def call(self, input_data): # Calculat

对于网络末端的个人层,我再次需要第一层的输入。是否可以使用相同的输入两次? 在最后一个个人层中,我需要模型的输入,其中包含 a、 b和c做最后的矩阵乘法。问题是矩阵在每一步都会改变,因为a、b和c总是不同的

class PersonalLayer(Layer): 
   def __init__(self):
       super(PersonalLayer, self).__init__()
       
   def call(self, input_data): # Calculation of the matrix multiplication
       a= #input_data_model(0,1) and the values a,b,c should be float numbers for the following matrix generation
       b= #input_data_model(0,2)
       c= #input_data_model(0,3)
       matrix= matrix= tf.constant([[a*b*3,a+b,b**2]])
       prediction = tf.matmul(matrix,input_data)
       return prediction

input_data_model = keras.Input(shape=(10,))
x = layers.Dense(32,activation="relu") (input_data)
x = layers.Dense(64,activation="relu") (x)
x = layers.Dense(3,activation="sigmoid") (x)
output = PersonalLayer()(x) 

model = keras.Model(inputs=[input_data_model], outputs=output, name="Test")
model.summary()
有可能:

class PersonalLayer(tf.keras.layers.Layer): 
   def __init__(self):
       super(PersonalLayer, self).__init__()
       
   def call(self, input_data): # Calculation of the matrix multiplication
      a = input_data[1][0,1]
      b = input_data[1][0,2]
      c = input_data[1][0,3]
      matrix = tf.stack([a*b*3, a+b, b**2])[tf.newaxis, ...]
      prediction = tf.matmul(matrix, tf.transpose(input_data[0]))
      return prediction 

input_data = keras.Input(shape=(10,))
x = tf.keras.layers.Dense(32,activation="relu") (input_data)
x = tf.keras.layers.Dense(64,activation="relu") (x)
x = tf.keras.layers.Dense(3,activation="sigmoid") (x)
output = PersonalLayer()((x, input_data)) 

model = tf.keras.Model(inputs=[input_data], outputs=output, name="Test")
model.summary()
inp = tf.random.uniform((10, 10))
a = model(inp)

是的,这是正确的,但我需要最后一个密集层的输出和开始时的输入。@Marac查看编辑的答案谢谢!因此,在调用函数中,input_data[0]代表x,input_data[1]代表input_data,或者我如何分别访问两个不同的输入?是的,input_data[0]代表
x
,input_data[1]代表
input_data
谢谢!从包含十个不同数字的输入数据[1]中,我需要索引为0,1,2的
tf.常数([[a*b*3,a+b,b**2]])
a=tf.聚集数据(输入数据[1],[0,0])
不起作用。这个生成的矩阵应该与
输入数据[0]
相乘。你知道怎么做吗?请提供一个包含有效代码和一些示例数据的最小工作示例。没有注释,但实际上是必要的函数调用。谈论具体问题更容易。如果您有不断变化的维度,请确保将正确的矩阵相乘,这是非常重要的。