Попробуйте использовать hub.KerasLayer
, чтобы загрузить модель в tf.keras.Model
, а затем преобразовать ее в ŧflite
, используя .from_keras_model
.
Нет такой вещи, как "keras SavedModel". Есть SavedModel
, то есть .pb
file + assets
folder + variables
folder. Это как формат файла, способ хранения вашей модели. Это не имеет ничего общего с памятью tf.keras.Model
s. hub.load
не возвращает tf.keras.Model
, а скорее "наиболее универсальную c вещь", которую вы можете сохранить в формате SavedModel
, а именно _UserObject
. Это потому, что вы можете сохранять другие вещи, кроме tf.keras.Models
s, в формате SavedModel
s.
Я знаю, что это был не ваш вопрос, но если вы делаете хотите вернуть tf.keras.Model
после загрузки, вы можете использовать tf.keras.save_model
, чтобы сохранить его. Затем он вернется как tf.keras.Model
после загрузки с использованием tf.saved_model.load
(так что это больше не самая общая c вещь).
РЕДАКТИРОВАТЬ:
Просто код:
import tensorflow as tf
import tensorflow_hub as hub
model = tf.keras.Sequential()
model.add(tf.keras.layers.InputLayer(dtype=tf.string, input_shape=()))
model.add(hub.KerasLayer("https://tfhub.dev/google/universal-sentence-encoder/4"))
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
, который работает (он начинает преобразование), но вы получаете:
2020-05-05 10:48:44.927433: I tensorflow/lite/toco/import_tensorflow.cc:659] Converting unsupported operation: StatefulPartitionedCall
Так этот является кодом для преобразования моделей, сохраненных в формате SavedModel
в tflite
, но вы получаете ошибку google-universal-sentence-encoder
Speci c. Не знаю, как это исправить.