Machine learning 试图写一个暹罗网络

Machine learning 试图写一个暹罗网络,machine-learning,deep-learning,tf.keras,siamese-network,Machine Learning,Deep Learning,Tf.keras,Siamese Network,我希望有2个或更多相同的网络输出到另一个网络 def getSimpleAdditionModel(): seq_conv_model = [ layers.Dense(32, activation='relu', input_shape=[2]), layers.Dense(32, activation='relu'), layers.Dense(1) ] seq_model = tf.keras.Sequential(s

我希望有2个或更多相同的网络输出到另一个网络

def getSimpleAdditionModel():
    seq_conv_model = [
        layers.Dense(32, activation='relu', input_shape=[2]),
        layers.Dense(32, activation='relu'),
        layers.Dense(1)
    ]
    seq_model = tf.keras.Sequential(seq_conv_model)
    return seq_model


def outputModel(output1, output2):
    deq = [
        layers.Dense(32,activation='relu')(Concatenate([output1, output2])),
        layers.Dense(32, activation='relu'),
        layers.Dense(1)
    ]
    seq_model = tf.keras.Sequential(deq)
    return seq_model


input1 = layers.Input(shape=(2,))
input2 = layers.Input(shape=(2,))

seqmodel = getSimpleAdditionModel()
output_x1 = seqmodel(input1)
output_x2 = seqmodel(input2)


model = models.Model([input1, input2], outputModel(output_x1, output_x2))

optimizer = tf.keras.optimizers.RMSprop(0.001)
model.compile(loss='mse',
              optimizer=optimizer,
              metrics=['mae', 'mse'])
但是,当我试图将输出_x1和输出_x2作为另一个网络的输入时,我在outputModel中得到了一些错误。我尝试了没有连接,但没有成功

我想实现与本文类似的目标: 不使用conv神经网络

对于上面代码中的一些错误,我得到:

TypeError: The added layer must be an instance of class Layer. Found: Tensor("dense_6/Identity:0", shape=(None, 32), dtype=float32)
Stack is :
  File "SiameseAddition.py", line 53, in <module>
    model = models.Model([input1, input2], outputModel(output_x1, output_x2))
  File "SiameseAddition.py", line 40, in outputModel
    seq_model = tf.keras.Sequential(deq)
TypeError:添加的层必须是类层的实例。发现:张量(“稠密_6/Identity:0”,shape=(无,32),dtype=float32)
堆栈是:
文件“siamesaddition.py”,第53行,在
模型=模型。模型([input1,input2],outputModel(输出×1,输出×2))
outputModel中第40行的文件“siamesaddition.py”
seq_模型=tf.keras.Sequential(deq)
如果使用outputModel方法,我将执行以下操作:

def outputModel(output1, output2):
    deq = [
        layers.Dense(32,activation='relu')(output1, output2),
TypeError: call() takes 2 positional arguments but 3 were given
File "SiameseAddition.py", line 40, in <module>
    model = models.Model([input1, input2], outputModel(output_x1, output_x2))
def outputModel(output1,output2):
deq=[
密集层(32,激活='relu')(输出1,输出2),
TypeError:call()接受2个位置参数,但给出了3个
文件“siamesaddition.py”,第40行,在
模型=模型。模型([input1,input2],outputModel(输出×1,输出×2))
完整代码可在以下网址查看:

我想我找到了我需要的关于如何在 我创建模型的方式看起来是完全错误的。如上所述,我使用的是功能性API,它进行得更加顺利。 方法如下:

def getSimpleAdditionModel(input_shape):
    model_input = Input(shape=input_shape)
    layer = layers.Dense(32, activation='relu')(model_input)
    layer = layers.Dense(32, activation='relu')(layer)
    layer = layers.Dense(1)(layer)
    return tf.keras.Model(model_input, layer)



def outputModel(embedding_shape):
    embedding_a = Input(shape=embedding_shape)
    embedding_b = Input(shape=embedding_shape)

    layer = layers.Concatenate()([embedding_a, embedding_b])
    layer = layers.Dense(32,activation='relu')(layer)
    layer = layers.Dense(32, activation='relu')(layer)
    layer = layers.Dense(1)(layer)

    return tf.keras.Model([embedding_a, embedding_b], layer)

input1 = [2]
input2 = [2]
input_a = Input(shape=input1)
input_b = Input(shape=input2)


base_model = getSimpleAdditionModel(input1)
processed_a = base_model(input_a)
processed_b = base_model(input_b)

optimizer = tf.keras.optimizers.RMSprop(0.001)

oModel = outputModel(base_model.output_shape)
head = oModel([processed_a, processed_b])

model = tf.keras.Model([input_a, input_b], head)
model.compile(loss='mse',
              optimizer=optimizer,
              metrics=['mae', 'mse'])

我认为重复使用上述链接看起来比自己编写网络代码要好得多

除非您明确告诉我们这些错误是什么,否则我得到的一些错误不是问题描述。我们无法从这里看到您的屏幕或了解您的想法。请提出您的问题并添加您看到的确切错误消息;它们在屏幕右侧在你面前,所以你没有理由不把它们包括在这里,所以我们有这些信息。对不起,让我来编辑