Форма концентратора тензорного потока не определена

#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)
  

Ваша модель выглядит следующим образом:
Модель