用两个输入作为字符串构建连体网络

问题描述

我正在尝试构建一个接收两个输入字符串的 siamese 网络。我使用字符串类型是因为我加载了一个我想训练的 USE 层。

def siamese_model():

    left = Input(shape=(1,),dtype=tf.string)
    right = Input(shape=(1,dtype=tf.string)
    module_url = "https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3"
    embedding_layer = hub.KerasLayer(module_url,trainable=True)
    left_encoded = embedding_layer(tf.squeeze(tf.cast(left,tf.string)))
    right_encoded = embedding_layer(tf.squeeze(tf.cast(right,tf.string)))

    cosine_sim = Dot(axes=1,normalize=True)([left_encoded,right_encoded])

    siamese_net = Model(inputs=[left,right],outputs=cosine_sim)
    return siamese_net

model = siamese_model()
model.compile(loss="mse",optimizer="adam",metrics=[pearson])

当我尝试

model.predict(x=[[["test"]],[["test"]]])
ValueError: Layer model_1 expects 2 input(s),but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None,1,None) dtype=string>]

如果我尝试使用浮点数,模型可以正确地看到两个输入。

import numpy as np

x1 = np.zeros((1,2))
model.predict(x=[x1,x1])

知道发生了什么吗?我确定这与输入的形状有关

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)