我无法使用load.models()加载经过训练的h5模型,如何解决此错误?

时间:2019-09-02 09:27:41

标签: python tensorflow keras neural-network

因此,我认为tensorflow.keras和独立的keras软件包存在冲突,并且无法加载我通过迁移学习制作的模型。 导入CNN ipynb:

!pip install tensorflow-gpu==2.0.0b1

import tensorflow as tf
from tensorflow import keras
print(tf.__version__) 

加载此预先训练的模型

base_model = keras.applications.xception.Xception(weights="imagenet",
                                              include_top=False)
avg = keras.layers.GlobalAveragePooling2D()(base_model.output)
output = keras.layers.Dense(n_classes, activation="softmax")(avg)
model = keras.models.Model(inputs=base_model.input, outputs=output)

保存方式:

model.save('Leavesnet Model 2.h5')

然后在已经经过培训的模型的新ipynb中(导入与CNN ipynb中的导入相同:

from keras.models import load_model

model =load_model('Leavesnet Model.h5')

我得到了错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-4-77ca5a1f5f24> in <module>()
      2 from keras.models import load_model
      3 
----> 4 model =load_model('Leavesnet Model.h5')

13 frames
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in placeholder(shape, ndim, dtype, sparse, name)
    539         x = tf.sparse_placeholder(dtype, shape=shape, name=name)
    540     else:
--> 541         x = tf.placeholder(dtype, shape=shape, name=name)
    542     x._keras_shape = shape
    543     x._uses_learning_phase = False

AttributeError: module 'tensorflow' has no attribute 'placeholder' 

我认为tf.keras与独立的keras之间可能存在冲突,有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

是的,tf.keraskeras软件包之间存在冲突,您使用tf.keras训练了模型,但随后使用keras软件包加载了模型。不支持,您应该只使用此软件包的一个版本。

具体问题是您正在使用TensorFlow 2.0,但是独立的keras软件包尚不支持TensorFlow 2.0。

答案 1 :(得分:0)

尝试替换

从keras.models导入load_model 模型= load_model('Leavesnet Model.h5')

使用

model = tf.keras.models.load_model(model_path)

它对我有用,我正在使用: 张量流版本:2.0.0 keras版本:2.3.1

您可以检查以下内容: https://www.tensorflow.org/api_docs/python/tf/keras/models/load_model?version=stable

答案 2 :(得分:-2)

确保h5py已安装在系统中。如果没有尝试,请点安装h5py。