Ошибка имени: имя ‘elmo’ не определено tensorflow в python

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