1
resposta

[Dúvida] [Erro] Duvida erro ao salvar

Ao fazer o codigo de salvar esta dando erro

from tensorflow.keras.models import load_model

modelo.save('modelo.h5')
modelo_salvo = load_model('modelo.h5')

Erro :

WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/keras/src/ops/operation.py in from_config(cls, config)
    233         try:
--> 234             return cls(**config)
    235         except Exception as e:

10 frames
ValueError: Could not interpret activation function identifier: {'module': 'builtins', 'class_name': 'function', 'config': 'softmax_v2', 'registered_name': 'function'}

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/keras/src/ops/operation.py in from_config(cls, config)
    234             return cls(**config)
    235         except Exception as e:
--> 236             raise TypeError(
    237                 f"Error when deserializing class '{cls.__name__}' using "
    238                 f"config={config}.\n\nException encountered: {e}"

TypeError: Error when deserializing class 'Dense' using config={'name': 'dense_1', 'trainable': True, 'dtype': 'float32', 'units': 10, 'activation': {'module': 'builtins', 'class_name': 'function', 'config': 'softmax_v2', 'registered_name': 'function'}, 'use_bias': True, 'kernel_initializer': {'module': 'keras.initializers', 'class_name': 'GlorotUniform', 'config': {'seed': None}, 'registered_name': None}, 'bias_initializer': {'module': 'keras.initializers', 'class_name': 'Zeros', 'config': {}, 'registered_name': None}, 'kernel_regularizer': None, 'bias_regularizer': None, 'kernel_constraint': None, 'bias_constraint': None}.

Exception encountered: Could not interpret activation function identifier: {'module': 'builtins', 'class_name': 'function', 'config': 'softmax_v2', 'registered_name': 'function'}
1 resposta

Olá, Daniel!!

Tô aqui para ajudar você! :)

Vamos por passos…

1º Passo

→ A mensagem inicial é apenas um aviso sobre o formato HDF5 ser considerado legado. A recomendação é usar o formato nativo do Keras, salvando o modelo com a extensão .keras ao invés de .h5.

→ Já a mensagem de erro "Não foi possível interpretar o identificador da função de ativação: {'module': 'builtins', 'class_name': 'function', 'config': 'softmax_v2', 'registered_name': 'function'}" indica que a função load_model está com problemas para entender como desserializar a função de ativação 'softmax' usada no modelo. Isso pode ser devido a problemas de compatibilidade entre como o modelo foi salvo e como ele está sendo carregado.

Para resolver esses problemas, você pode alterar o código da seguinte forma:

from tensorflow.keras.models import load_model
import tensorflow as tf # Importe 'tensorflow'

modelo.save('modelo.keras')
modelo_salvo = load_model('modelo.keras', custom_objects={'softmax_v2': tf.nn.softmax}) # Diga ao load_model como lidar com 'softmax_v2'

→ Ao adicionar custom_objects={'softmax_v2': tf.nn.softmax} à função load_model, estamos dizendo explicitamente como interpretar a ativação 'softmax_v2' ao carregar o modelo.

2º Passo

Caso seja necessário, para evitar outros problemas que possam surgir, recomendo substituir ‘acc’ por ‘accuracy’ no bloco de código seguinte. Assim:

plt.plot(historico.history['accuracy'])
plt.plot(historico.history['val_accuracy'])
plt.title('Acurácia por épocas')
plt.xlabel('épocas')
plt.ylabel('acurácia')
plt.legend(['treino', 'validação'])

Segui esses passos e eles foram suficientes para rodar o código normalmente.

Espero ter ajudado e obrigada por comunicar sobre esse problema. A situação já foi encaminhada para o time responsável.

Abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!