Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有人得到了;属性错误:';str';对象没有属性';解码'&引用,加载已保存的模型时_Python_Keras - Fatal编程技术网

Python 是否有人得到了;属性错误:';str';对象没有属性';解码'&引用,加载已保存的模型时

Python 是否有人得到了;属性错误:';str';对象没有属性';解码'&引用,加载已保存的模型时,python,keras,Python,Keras,训练结束后,我使用 model.save_weights(MODEL_WEIGHTS) and model.save(MODEL_NAME) 模型和权重已成功保存,没有错误。 我可以简单地使用model.load\u权重成功加载权重,它们很好运行,但是当我尝试通过load\u model加载保存模型时,我得到了一个错误 File "C:/Users/Rizwan/model_testing/model_performance.py", line 46, in <module> Mo

训练结束后,我使用

model.save_weights(MODEL_WEIGHTS) and model.save(MODEL_NAME)
模型和权重已成功保存,没有错误。 我可以简单地使用model.load\u权重成功加载权重,它们很好运行,但是当我尝试通过load\u model加载保存模型时,我得到了一个错误

File "C:/Users/Rizwan/model_testing/model_performance.py", line 46, in <module>
Model2 = load_model('nasnet_RS2.h5',custom_objects={'euc_dist_keras': euc_dist_keras})
File "C:\Users\Rizwan\AppData\Roaming\Python\Python36\site-packages\keras\engine\saving.py", line 419, in load_model
model = _deserialize_model(f, custom_objects, compile)
File "C:\Users\Rizwan\AppData\Roaming\Python\Python36\site-packages\keras\engine\saving.py", line 321, in _deserialize_model
optimizer_weights_group['weight_names']]
File "C:\Users\Rizwan\AppData\Roaming\Python\Python36\site-packages\keras\engine\saving.py", line 320, in <listcomp>
n.decode('utf8') for n in
AttributeError: 'str' object has no attribute 'decode'

这可能是由于从不同版本的keras保存的模型。当从keras 2.2.6加载tensorflow.keras生成的模型时,我遇到了同样的问题(我认为这类似于tf 1.12的keras 2.1.6)


您可以使用
模型加载权重。加载权重
并从您想要使用的keras版本重新保存完整的模型。

我遇到了相同的问题,解决了将
编译=False
放入
加载模型

model_ = load_model('path to your model.h5',custom_objects={'Scale': Scale()}, compile=False)
sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
model_.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

对我来说,解决方案是将
h5py
包降级(在我的例子中是2.10.0),显然仅仅将Keras和Tensorflow恢复到正确的版本是不够的。

对我来说,是h5py的版本优于我以前的版本。

通过设置为
2.10.0

使用TF格式文件而不是h5py:save_format='TF'保存,修复了此问题。就我而言:

model.save_weights("NMT_model_weight.tf",save_format='tf')

我使用以下命令降级了我的h5py包

pip install 'h5py==2.10.0' --force-reinstall

重新启动了我的ipython内核,它工作了。

在我的环境中使用tensorflow==2.4.1、h5py==2.1.0和python 3.8之后,我仍然会出现此错误。
修复了将python版本降级到3.6.9的问题的是,对我来说,than works的解决方案是:

pip3 uninstall keras
pip3 uninstall tensorflow
pip3 install --upgrade pip3
pip3 install tensorflow
pip3 install keras

但它也发生在我用来训练模型的同一台机器上。同样的错误…是的,你是对的,关于
模型。加载权重
我可以这样做,但我想知道为什么我不能加载整个模型架构更多关于这个问题:从alexhg的链接来看,
我们将有人在将来使TF与h5py>=3一起工作,但这只会出现在TF2.5或更高版本中。
出现此问题是因为TensorFlow无法与h5py v3及更高版本一起工作。2.10.0是最新版本-2.x.y。它成功了!我试图加载.h5格式的keras模型,然后将其保存为tflite模型。不幸的是,处理器2 GHz四核Intel Core i5没有2.10.0版本的cp95控制盘,出现不受支持的错误,而3..1.0出现问题。无论如何,为什么我们需要
自定义_对象={'Scale':Scale()}
compile=False
给了我这个错误,
文件/usr/local/lib/python3.6/dist packages/tensorflow/python/keras/engine/saving.py”,第229行,在load\u model\u config=json.loads(model\u config.decode('utf-8'))AttributeError:'str'对象没有属性'decode'
我有同样的问题,但compile=False是不相关的:)这没用。这对我有用。非常感谢
pip3 uninstall keras
pip3 uninstall tensorflow
pip3 install --upgrade pip3
pip3 install tensorflow
pip3 install keras