#python #tensorflow #keras
#python #тензорный поток #keras
Вопрос:
Я пытаюсь загрузить предварительно подготовленную модель встраивания, но независимо от того, какую форму я даю, я не могу найти форму ввода. Это кажется довольно популярным выбором, но я не могу найти на странице концентратора тензорного потока какой-либо индикатор того, какую форму ввода использовать. Предполагается, что входная последовательность должна иметь переменную длину, поэтому я использую форму ввода none. Keras автоматически определяет размер пакета
embedding_url = 'https://tfhub.dev/google/universal-sentence-encoder-large/5'
embedding_layer = hub.KerasLayer(embedding_url)
premises = tf.keras.Input(shape=(None,))
conclusion = tf.keras.Input(shape=(None,))
x1 = embedding_layer(premises)
x2 = embedding_layer(conclusion)
model = tf.keras.Model(inputs=[premises, conclusion], outputs=[x1, x2])
Вот ошибка, которую я получаю
ValueError: Python inputs incompatible with input_signature:
inputs: (
Tensor("input_5:0", shape=(None, None), dtype=float32))
input_signature: (
TensorSpec(shape=<unknown>, dtype=tf.string, name=None))
Ответ №1:
Вы можете использовать функциональный API с KerasLayer, сохранив входной параметр shape в виде пустого кортежа.
Код:
import tensorflow_hub as hub
import tensorflow as tf
embedding_url = 'https://tfhub.dev/google/universal-sentence-encoder-large/5'
premises = tf.keras.layers.Input(shape=(), name="Input1", dtype=tf.string)
conclusion = tf.keras.layers.Input(shape=(), name="Input2", dtype=tf.string)
embedding_layer = hub.KerasLayer(embedding_url)
x1 = embedding_layer(premises)
x2 = embedding_layer(conclusion)
model = tf.keras.Model(inputs=[premises, conclusion], outputs=[x1, x2])
tf.keras.utils.plot_model(model, 'my_first_model.png', show_shapes=True)