无法从h5文件重新加载已训练的resnet50模型

3

我对神经网络还很陌生,我正在尝试使用Keras构建一个鱼类分类器。我得到了一份Python代码,它使用Keras和TensorFlow后端创建了一个RESNET-50模型,并使用model.save()输出一个h5文件。

我编写了另一个Python文件,从h5文件中重新加载RESNET-50模型。我使用keras.models.load_model()加载h5文件。但是Python给我返回以下错误消息,我不知道为什么。请帮帮我,谢谢。

Traceback (most recent call last):
  File "keras-cnn-predict.py", line 75, in <module>
    model=keras.models.load_model(model_config_filename)
  File "C:\Python\Python36\lib\site-packages\keras\engine\saving.py", line 419, in load_model
    model = _deserialize_model(f, custom_objects, compile)
  File "C:\Python\Python36\lib\site-packages\keras\engine\saving.py", line 225, in _deserialize_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "C:\Python\Python36\lib\site-packages\keras\engine\saving.py", line 458, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "C:\Python\Python36\lib\site-packages\keras\layers\__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "C:\Python\Python36\lib\site-packages\keras\utils\generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "C:\Python\Python36\lib\site-packages\keras\engine\network.py", line 1022, in from_config
    process_layer(layer_data)
  File "C:\Python\Python36\lib\site-packages\keras\engine\network.py", line 1008, in process_layer
    custom_objects=custom_objects)
  File "C:\Python\Python36\lib\site-packages\keras\layers\__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "C:\Python\Python36\lib\site-packages\keras\utils\generic_utils.py", line 147, in deserialize_keras_object
    return cls.from_config(config['config'])
  File "C:\Python\Python36\lib\site-packages\keras\engine\base_layer.py", line 1109, in from_config
    return cls(**config)
  File "C:\Python\Python36\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Python\Python36\lib\site-packages\keras\layers\convolutional.py", line 490, in __init__
    **kwargs)
  File "C:\Python\Python36\lib\site-packages\keras\layers\convolutional.py", line 117, in __init__
    self.kernel_initializer = initializers.get(kernel_initializer)
  File "C:\Python\Python36\lib\site-packages\keras\initializers.py", line 508, in get
    return deserialize(identifier)
  File "C:\Python\Python36\lib\site-packages\keras\initializers.py", line 503, in deserialize
    printable_module_name='initializer')
  File "C:\Python\Python36\lib\site-packages\keras\utils\generic_utils.py", line 147, in deserialize_keras_object
    return cls.from_config(config['config'])
  File "C:\Python\Python36\lib\site-packages\keras\initializers.py", line 30, in from_config
    return cls(**config)
  File "C:\Python\Python36\lib\site-packages\keras\initializers.py", line 195, in __init__
    'but got', distribution)
ValueError: ('Invalid `distribution` argument: expected one of {"normal", "uniform"} but got', 'truncated_normal')

你在生成h5文件中的模型和加载它时使用了相同的Keras版本吗? - Dr. Snoopy
4
我已经解决了这个问题,我的代码同时使用了tensorflow中包含的keras (tensorflow.python.keras) 和独立的keras包。因此出现了这个错误,感谢您的评论。 - Shan-Hung Hsu
1个回答

1
D:\Anaconda3\lib\site-packages\keras\initializers.py in __init__(self, scale, mode, distribution, seed)
    193             raise ValueError('Invalid `distribution` argument: '
    194                              'expected one of {"normal", "uniform"} '
--> 195                              'but got', distribution)
    196         self.scale = scale
    197         self.mode = mode

ValueError: ('Invalid `distribution` argument: expected one of {"normal", "uniform"} but got', 'truncated_normal')

import tensorflow.python.keras 中替换为 keras。然后就成功了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接