加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,但不知为何我的训练模型仍然无法加载!我已经检查了以下链接以及更多,所以请不要立即标记为重复。谢谢

  1. 如何使用Keras保存最终模型?
  2. https://www.tensorflow.org/guide/keras/save_and_serialize
  3. https://www.tensorflow.org/tutorials/distribute/save_and_load
  4. https://www.tensorflow.org/guide/keras/functional
  5. 如何从Keras中的HDF5文件加载模型?

这是我的模型:

def get_model(train=True):        set_seed(33)        pre_process = Lambda(preprocess_input)    vgg = VGG16(weights = 'imagenet', include_top = True, input_shape = SHAPE)    vgg = Model(vgg.input, vgg.layers[-3].output)    vgg.trainable = False        inp = Input(SHAPE)    vgg_16_process = pre_process(GaussianNoise(0.1)(inp))    vgg_out = vgg(vgg_16_process)        noise = Lambda(tf.zeros_like)(vgg_out)    noise = GaussianNoise(0.1)(noise)    if train:        x = Lambda(lambda z: tf.concat(z, axis=0))([vgg_out,noise])        x = Activation('relu')(x)    else:        x = vgg_out            x = Dense(512, activation='relu')(x)    x = Dense(128, activation='relu')(x)    out = Dense(2, activation='softmax')(x)    model = Model(inp, out)    model.compile(Adam(learning_rate=1e-4), loss='binary_crossentropy')        return model

之后,我有一些如下所示的测试和训练生成器,数据集是经典的狗与猫数据集,我试图实现单类分类任务。

train_datagen = ImageDataGenerator()test_datagen = ImageDataGenerator()train_generator = train_datagen.flow_from_directory(            base_path + 'training_set/training_set/',            target_size = (SHAPE[0], SHAPE[1]),            batch_size = batch_size,            class_mode = 'categorical',            shuffle = True,            seed = 33,            classes = ['cats']    )test_generator = test_datagen.flow_from_directory(            base_path + 'test_set/test_set/',            target_size = (SHAPE[0], SHAPE[1]),            batch_size = batch_size,            class_mode = 'categorical',            shuffle = True,            seed = 33,            classes = ['dogs','cats'])

然后我最终编译模型

model = get_model()model.fit(wrap_generator(train_generator), steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=1)

然后我按如下方式保存模型

model.save('my_custom_model')

无论是使用这种格式保存还是’my_custom_model.h5’保存,都可以完美无误地保存。如果我只是使用save,则会创建一个包含’assets, variables, .pb文件’的文件夹,这在StackOverflow的帖子中提到过是预期的。

** 然后问题出现了 **

from keras.models import load_modelloaded_model = load_model('my_custom_model.h5')#or loaded_model = tf.keras.models.load_model('my_custom_model.h5')#or loaded_model = load_model('my_custom_model') # as from folder

所有这些都抛出相同的错误

TypeError: ‘module’ object is not callable

我知道我犯了一些错误或者模型有点不同,请指导我寻找解决方案的正确方向。

Python: 3.7.2Tensorflow: 2.6.0Keras: 2.6.0

完整的堆栈跟踪

---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)~\AppData\Roaming\Python\Python37\site-packages\tensorflow\python\ops\array_ops.py in wrapper(*args, **kwargs)    205     try:--> 206       return target(*args, **kwargs)    207     except (TypeError, ValueError):TypeError: 'str' object is not callableDuring handling of the above exception, another exception occurred:TypeError                                 Traceback (most recent call last)<ipython-input-10-cd6655ece7c5> in <module>      7 # loaded_model = tf.keras.models.load_model("my_custom_model2")      8 ----> 9 loaded_model = tf.keras.models.load_model('model_notebook.h5')     10 # print(loaded_model)     11 # print("------------")~\AppData\Roaming\Python\Python37\site-packages\keras\saving\save.py in load_model(filepath, custom_objects, compile, options)    199             (isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):    200           return hdf5_format.load_model_from_hdf5(filepath, custom_objects,--> 201                                                   compile)    202     203         filepath = path_to_string(filepath)~\AppData\Roaming\Python\Python37\site-packages\keras\saving\hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)    179     model_config = json_utils.decode(model_config)    180     model = model_config_lib.model_from_config(model_config,--> 181                                                custom_objects=custom_objects)    182     183     # set weights~\AppData\Roaming\Python\Python37\site-packages\keras\saving\model_config.py in model_from_config(config, custom_objects)     50                     '`Sequential.from_config(config)`?')     51   from keras.layers import deserialize  # pylint: disable=g-import-not-at-top---> 52   return deserialize(config, custom_objects=custom_objects)     53      54 ~\AppData\Roaming\Python\Python37\site-packages\keras\layers\serialization.py in deserialize(config, custom_objects)    210       module_objects=LOCAL.ALL_OBJECTS,    211       custom_objects=custom_objects,--> 212       printable_module_name='layer')~\AppData\Roaming\Python\Python37\site-packages\keras\utils\generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)    676             custom_objects=dict(    677                 list(_GLOBAL_CUSTOM_OBJECTS.items()) +--> 678                 list(custom_objects.items())))    679       else:    680         with CustomObjectScope(custom_objects):~\AppData\Roaming\Python\Python37\site-packages\keras\engine\functional.py in from_config(cls, config, custom_objects)    661     with generic_utils.SharedObjectLoadingScope():    662       input_tensors, output_tensors, created_layers = reconstruct_from_config(--> 663           config, custom_objects)    664       model = cls(inputs=input_tensors, outputs=output_tensors,    665                   name=config.get('name'))~\AppData\Roaming\Python\Python37\site-packages\keras\engine\functional.py in reconstruct_from_config(config, custom_objects, created_layers)   1281       if layer in unprocessed_nodes:   1282         for node_data in unprocessed_nodes.pop(layer):-> 1283           process_node(layer, node_data)   1284    1285   input_tensors = []~\AppData\Roaming\Python\Python37\site-packages\keras\engine\functional.py in process_node(layer, node_data)   1229         input_tensors = (   1230             base_layer_utils.unnest_if_single_tensor(input_tensors))-> 1231       output_tensors = layer(input_tensors, **kwargs)   1232    1233       # Update node index map.~\AppData\Roaming\Python\Python37\site-packages\keras\engine\base_layer.py in __call__(self, *args, **kwargs)    975     if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):    976       return self._functional_construction_call(inputs, args, kwargs,--> 977                                                 input_list)    978     979     # Maintains info about the `Layer.call` stack.~\AppData\Roaming\Python\Python37\site-packages\keras\engine\base_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)   1113       # Check input assumptions set after layer building, e.g. input shape.   1114       outputs = self._keras_tensor_symbolic_call(-> 1115           inputs, input_masks, args, kwargs)   1116    1117       if outputs is None:~\AppData\Roaming\Python\Python37\site-packages\keras\engine\base_layer.py in _keras_tensor_symbolic_call(self, inputs, input_masks, args, kwargs)    846       return tf.nest.map_structure(keras_tensor.KerasTensor, output_signature)    847     else:--> 848       return self._infer_output_signature(inputs, args, kwargs, input_masks)    849     850   def _infer_output_signature(self, inputs, args, kwargs, input_masks):~\AppData\Roaming\Python\Python37\site-packages\keras\engine\base_layer.py in _infer_output_signature(self, inputs, args, kwargs, input_masks)    886           self._maybe_build(inputs)    887           inputs = self._maybe_cast_inputs(inputs)--> 888           outputs = call_fn(inputs, *args, **kwargs)    889     890         self._handle_activity_regularization(inputs, outputs)~\AppData\Roaming\Python\Python37\site-packages\keras\layers\core.py in call(self, inputs, mask, training)    901     with tf.GradientTape(watch_accessed_variables=True) as tape,\    902         tf.variable_creator_scope(_variable_creator):--> 903       result = self.function(inputs, **kwargs)    904     self._check_variables(created_variables, tape.watched_variables())    905     return result~\AppData\Roaming\Python\Python37\site-packages\tensorflow\python\ops\array_ops.py in wrapper(*args, **kwargs)    208       # Note: convert_to_eager_tensor currently raises a ValueError, not a    209       # TypeError, when given unexpected types.  So we need to catch both.--> 210       result = dispatch(wrapper, args, kwargs)    211       if result is not OpDispatcher.NOT_SUPPORTED:    212         return resultTypeError: 'module' object is not callable

回答:

数据集是经典的狗与猫数据集,我试图实现单类分类任务。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注