#python #tensorflow #bots
Вопрос:
Я использую tensorflow==1.15.5
.
И я загружаю предварительно подготовленную модель вот так
# loading pre trained model to extract elmo vectors
# this is required to load custom model
elmo = hub.Module("https://tfhub.dev/google/elmo/2", trainable=True)
class DeepLearningBot:
dirName = os.path.dirname(__file__)
stopwords = ['i', 'am', 'a',
'to', 'is', 'do', 'in', 'of']
labelModelPath = os.path.join(dirName, "config/labels_mapping.pkl")
modelPath = os.path.join(dirName,"models/elmo-model-bilstm2.h5")
def init():
Logger.log("Using tensorflow : " tf.__version__)
DeepLearningBot.modelBlstm = tf.keras.models.load_model(DeepLearningBot.modelPath)
Для загрузки пользовательской модели необходима переменная elmo (требуется переменная elmo внутри модели)
Я инициализировал переменную elmo
вне класса, но когда я загружаю модель внутри init()
метода, в ней говорится
return deserialize(config, custom_objects=custom_objects)
File "c:\env37libsite-packagestensorflow_corepythonkeraslayersserialization.py", line 105, in deserialize
printable_module_name='layer')
File "c:PERSONALprojectsAdamAIadam-chat-serverenv37libsite-packagestensorflow_corepythonkerasutilsgeneric_utils.py", line 191, in deserialize_keras_object
list(custom_objects.items())))
File "c:env37libsite-packagestensorflow_corepythonkerasenginenetwork.py", line 1081, in from_config
process_node(layer, node_data)
File "c:PERSONALprojectsAdamAIadam-chat-serverenv37libsite-packagestensorflow_corepythonkerasenginenetwork.py", line 1039, in process_node
layer(input_tensors, **kwargs)
File "c:env37libsite-packagestensorflow_corepythonkerasenginebase_layer.py", line 854, in __call__
outputs = call_fn(cast_inputs, *args, **kwargs)
File "c:env37libsite-packagestensorflow_corepythonkeraslayerscore.py", line 789, in call
return self.function(inputs, **arguments)
File "<ipython-input-45-e850aa69f190>", line 3, in ELMoEmbedding_bl
NameError: name 'elmo' is not defined
Теперь как я могу это решить ?
и есть ли какой-либо другой способ настроить предварительно подготовленную модель?
Ответ №1:
Модель использовала переменную elmo
и tf
, поэтому она ожидала, что эти переменные будут объявлены перед загрузкой модели.
Существует другой способ передать его при загрузке модели с помощью custom_objects
свойства
DeepLearningBot.modelBlstm = tf.keras.models.load_model(DeepLearningBot.modelPath,
custom_objects={
'elmo': hub.Module("https://tfhub.dev/google/elmo/2", trainable=False),
'tf': tf
})