Загрузка модели Raise ValueError Неизвестная функция потерь - PullRequest
0 голосов
/ 04 апреля 2020

это код после того, как я пытаюсь сохранить и загрузить мою модель:

model.save('path_to_my_model.h5')
del model
model = tf.keras.models.load_model('path_to_my_model.h5', custom_objects={'Wraparound2D': Wraparound2D})

import tensorflow.keras.backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functor = K.function(inp, outputs)   # evaluation function

layer_outs = functor([X_test, 1.])



# Plot activations of different neurons in different layers 
all_layer_activations = list()

min_max_scaler = lambda x : (x - np.min(x))/(np.max(x) - np.min(x))
# min_max_scaler = lambda x : (x - np.mean(x))
for j in range(1, 5):
    if j==1:
        layer_im = np.hstack([min_max_scaler(layer_outs[1][0][..., i]) for i in range(10)])
    else:
        pattern = np.reshape(layer_outs[j][0], (wspan, hspan, -1))
        layer_im = np.hstack([min_max_scaler(pattern[..., i]) for i in range(10)])
    all_layer_activations.append(layer_im)

но я получаю следующую ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-9-75d24275ae64> in <module>()
     92 model.save('path_to_my_model.h5')
     93 del model
---> 94 model = tf.keras.models.load_model('path_to_my_model.h5', custom_objects={'Wraparound2D': Wraparound2D})
     95 
     96 import tensorflow.keras.backend as K

5 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    390       obj = module_objects.get(object_name)
    391       if obj is None:
--> 392         raise ValueError('Unknown ' + printable_module_name + ':' + object_name)
    393     # Classes passed by name are instantiated with no args, functions are
    394     # returned as-is.

ValueError: Unknown loss function: <lambda>

Я не могу понять, почему я получаю это спасибо за помощь. эта ошибка появляется сразу после того, как я пытаюсь загрузить модель до того, как все в порядке

1 Ответ

0 голосов
/ 05 апреля 2020

TL / DR: если в сохраненной модели есть настраиваемые объекты, вам необходимо указать compile = False в качестве аргумента для load_model. После загрузки модели вам нужно скомпилировать с custom_objects. Пожалуйста, посмотрите пример здесь .

Когда вы сохраняете модель с custom_objects, эти custom_objects не могут быть правильно сериализованы. Итак, когда вы загружаете модель, вам нужно пройти compile=False и загрузить модель. После загрузки модели вам необходимо скомпилировать модель, передав пользовательские объекты.

Надеюсь, это поможет. Спасибо!

...