是否有人在加载 Keras 保存的模型时遇到“AttributeError: 'str' object has no attribute 'decode'”

2023-11-27

训练后,我使用保存了 Keras 整个模型和仅权重

model.save_weights(MODEL_WEIGHTS) and model.save(MODEL_NAME)

模型和重量已成功保存,没有错误。 我可以简单地使用 model.load_weights 成功加载权重,并且它们很好用,但是当我尝试通过 load_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 2.2.4。 Python 3.6。 我的培训代码是:

from keras_preprocessing.image import ImageDataGenerator
from keras import backend as K
from keras.models import load_model
from keras.callbacks import ReduceLROnPlateau, TensorBoard, 
ModelCheckpoint,EarlyStopping
import pandas as pd

MODEL_NAME = "nasnet_RS2.h5"
MODEL_WEIGHTS = "nasnet_RS2_weights.h5"
def euc_dist_keras(y_true, y_pred):
return K.sqrt(K.sum(K.square(y_true - y_pred), axis=-1, keepdims=True))
def main():

# Here, we initialize the "NASNetMobile" model type and customize the final 
#feature regressor layer.
# NASNet is a neural network architecture developed by Google.
# This architecture is specialized for transfer learning, and was discovered via Neural Architecture Search.
# NASNetMobile is a smaller version of NASNet.
model = NASNetMobile()
model = Model(model.input, Dense(1, activation='linear', kernel_initializer='normal')(model.layers[-2].output))

#    model = load_model('current_best.hdf5', custom_objects={'euc_dist_keras': euc_dist_keras})

# This model will use the "Adam" optimizer.
model.compile("adam", euc_dist_keras)
lr_callback = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, min_lr=0.003)
# This callback will log model stats to Tensorboard.
tb_callback = TensorBoard()
# This callback will checkpoint the best model at every epoch.
mc_callback = ModelCheckpoint(filepath='current_best_mem3.h5', verbose=1, save_best_only=True)
es_callback=EarlyStopping(monitor='val_loss', min_delta=0, patience=4, verbose=0, mode='auto', baseline=None, restore_best_weights=True)

# This is the train DataSequence.
# These are the callbacks.
#callbacks = [lr_callback, tb_callback,mc_callback]
callbacks = [lr_callback, tb_callback,es_callback]

train_pd = pd.read_csv("./train3.txt", delimiter=" ", names=["id", "label"], index_col=None)
test_pd = pd.read_csv("./val3.txt", delimiter=" ", names=["id", "label"], index_col=None)

 #    train_pd = pd.read_csv("./train2.txt",delimiter=" ",header=None,index_col=None)
 #    test_pd = pd.read_csv("./val2.txt",delimiter=" ",header=None,index_col=None)
#model.summary()
batch_size=32
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_dataframe(dataframe=train_pd, 
directory="./images", x_col="id", y_col="label",
                                              has_ext=True, 
class_mode="other", target_size=(224, 224),
                                              batch_size=batch_size)
valid_generator = datagen.flow_from_dataframe(dataframe=test_pd, directory="./images", x_col="id", y_col="label",
                                              has_ext=True, class_mode="other", target_size=(224, 224),
                                              batch_size=batch_size)

STEP_SIZE_TRAIN = train_generator.n // train_generator.batch_size
STEP_SIZE_VALID = valid_generator.n // valid_generator.batch_size
model.fit_generator(generator=train_generator,
                    steps_per_epoch=STEP_SIZE_TRAIN,
                    validation_data=valid_generator,
                    validation_steps=STEP_SIZE_VALID,
                    callbacks=callbacks,
                    epochs=20)

# we save the model.
model.save_weights(MODEL_WEIGHTS)
model.save(MODEL_NAME)
if __name__ == '__main__':
   # freeze_support() here if program needs to be frozen
    main()

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有人在加载 Keras 保存的模型时遇到“AttributeError: 'str' object has no attribute 'decode'” 的相关文章

随机推荐

  • setTimeout 是使用 javascript 执行异步函数的好解决方案吗?

    在网上搜索有关异步函数的信息 我发现很多文章使用 setTimeout 来完成这项工作 window setTimeout function console log second 0 console log first Output fir
  • 绘制金字塔图

    我需要画一个金字塔图 如所附的 我找到了一个使用 R 但不是 ggplot 的示例here 任何人都可以给我一些使用 ggplot 执行此操作的提示吗 谢谢 我用了一些解决方法 而不是使用 geom bar 而是使用了 geom liner
  • Pandas read_csv 指定 AWS 配置文件

    熊猫 v1 0 5 使用s3fs用于连接 AWS S3 并读取数据的库 默认情况下 s3fs 使用在以下位置找到的凭据 aws credentials文件输入default轮廓 如何指定 pandas 在从 S3 读取 CSV 时应使用哪个
  • SQLAlchemy 重复键更新

    有没有一种优雅的方式来做INSERT ON DUPLICATE KEY UPDATE在 SQLAlchemy 中 我的意思是语法类似于inserter insert execute list of dictionaries ON DUPLI
  • 是否可以创建一个特征来回答类型是否来自 std?

    After 这个问题通过利用 ADL 我们可以创建一个特征来回答传递的类型是否来自我们的命名空间 include
  • Doxygen 分组

    我对 doxygen 中的页面和组有疑问 我有一个项目 我在其中使用 defgroup 和 ingroup cmd 对类等进行分组 到目前为止这工作正常 现在我想使用 Markdown 页面向项目添加特殊文档 这些页面应出现在专用模块 组
  • 在 Cocoa 中生成随机字母数字字符串

    我想调用一个方法 向其传递长度并让它生成一个随机字母数字字符串 是否有任何实用程序库可能具有大量此类功能 这是一个快速而肮脏的实现 没有经过测试 NSString letters abcdefghijklmnopqrstuvwxyzABCD
  • Maven、javadoc:包没有源文件

    我正在写一个专家package具有目录结构 frtex pom xml frtex src main java some files java frtex src main java utils some other files java
  • 对象转储器类

    我正在寻找一个可以以类似于以下格式输出对象及其所有叶值的类 User Name Gordon Age 60 WorkAddress Street 10 Downing Street Town London Country UK HomeAd
  • C# 阻止 Adob​​e Reader 窗口在尝试打印文档时出现

    由于我现在无法进入的原因 我需要在尝试打印文档时阻止 Adob e Reader 窗口打开 在我之前从事此工作的开发人员设置了以下标志 尽管我不太确定它们的用途 if RegistryManager GetAcrobatVersion gt
  • Angular 2从API下载PDF并在视图中显示

    我正在学习 Angular 2 Beta 我想知道如何从 API 下载 PDF 文件并将其显示在我的视图中 我尝试使用以下方式发出请求 var headers new Headers headers append Accept applic
  • 我无法在 Nuxt 3 中使用动态组件

    我尝试让它发挥作用
  • Gradle 构建错误:原因:org.gradle.api.internal.ExtensibleDynamicObject

    我正在尝试导入 https code google com p android serialport api 进入 Android Studio 由于这个项目涉及到ndk 所以我按照以下链接的说明构建NDK http tools andro
  • C# 中 VB 的 Asc() 和 Chr() 函数相当于什么?

    VB 有几个用于将 char 转换为 ASCII 值 反之亦然 的本机函数 Asc 和 Chr 现在我需要在 C 中获得等效的功能 最好的办法是什么 您始终可以添加对 Microsoft VisualBasic 的引用 然后使用完全相同的方
  • 通过 Hadoop 输入格式用于 pyspark 的 BigQuery 连接器示例

    我有一个大型数据集存储在 BigQuery 表中 我想将其加载到 pypark RDD 中以进行 ETL 数据处理 我意识到 BigQuery 支持 Hadoop 输入 输出格式 https cloud google com hadoop
  • TLS 连接未正确终止

    我正在使用 BitBucket 我的服务器上安装了一个存储库 git clone https bitbucket org myproject git 我能够从我的服务器拉取和推送到 bitbucket org 存储库 现在 在过去的几天里
  • 在“本地”或“监视”窗口中查看对象会导致 Excel 崩溃

    在 Excel 中 当我运行一些代码并放置断点时 我可以查看局部窗口中的值 在本地窗口中 当我尝试为我创建的类展开对象时 Excel 崩溃并显示 Microsoft Office Excel 遇到问题 需要关闭 对于给您带来的不便 我们深表
  • 如何编辑/重置警报管理器?

    我设置了一个首选项屏幕 其中有一个列表首选项 允许用户选择通知他们的时间间隔 他们可以选择是否每 2 4 8 10 或 12 小时后通知他们 这是我的列表偏好
  • 依赖于其他 DLL 的插件 DLL

    我正在编写一个 DLL 来插入另一个 第 3 方 应用程序 该 DLL 将需要依赖于另一组 DLL 出于许可原因 我无法静态链接 我希望我的 DLL 可以 xcopy deployable 到任何目录 我也不想要求将此目录添加到路径中 如果
  • 是否有人在加载 Keras 保存的模型时遇到“AttributeError: 'str' object has no attribute 'decode'”

    训练后 我使用保存了 Keras 整个模型和仅权重 model save weights MODEL WEIGHTS and model save MODEL NAME 模型和重量已成功保存 没有错误 我可以简单地使用 model load