Keras模型的保存与调用

一、模型的保存(结构 + 权重 + 优化器状态)

1、model.save('model.h5')#保存名为model的h5文件到程序所在目录

你可以使用 model.save(filepath) 将 Keras 模型保存到单个 HDF5 文件中,该文件将包含:

  • 模型的结构,允许重新创建模型
  • 模型的权重
  • 训练配置项(损失函数,优化器)
  • 优化器状态,允许准确地从你上次结束的地方继续训练。

2、如果只需要保存模型的结构,而非其权重或训练配置项,则可以执行以下操作:

# 保存为 JSON
json_string = model.to_json()

# 保存为 YAML
yaml_string = model.to_yaml()

你可以从这些数据建立一个新的模型:

# 从 JSON 重建模型:
from keras.models import model_from_json
model = model_from_json(json_string)

# 从 YAML 重建模型:
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)

 

3、只保存/加载模型的权重

如果您只需要 模型的权重,可以使用下面的代码以 HDF5 格式进行保存。

请注意,我们首先需要安装 HDF5 和 Python 库 h5py,它们不包含在 Keras 中。

model.save_weights('my_model_weights.h5')

假设你有用于实例化模型的代码,则可以将保存的权重加载到具有相同结构的模型中:

model.load_weights('my_model_weights.h5')

如果你需要将权重加载到不同的结构(有一些共同层)的模型中,例如微调或迁移学习,则可以按层的名字来加载权重:

model.load_weights('my_model_weights.h5', by_name=True)

例子:

"""
假设原始模型如下所示:
    model = Sequential()
    model.add(Dense(2, input_dim=3, name='dense_1'))
    model.add(Dense(3, name='dense_2'))
    ...
    model.save_weights(fname)
"""

# 新模型
model = Sequential()
model.add(Dense(2, input_dim=3, name='dense_1'))  # 将被加载
model.add(Dense(10, name='new_dense'))  # 将不被加载

# 从第一个模型加载权重;只会影响第一层,dense_1
model.load_weights(fname, by_name=True)

二、模型的加载

    from keras.models import load_model
    model = load_model('model.h5')#载入程序所在目录下名为model的h5模型框架参数

三、模型使用(图像分类模型)

1、model.predict()

      当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标签。

numpy.argmax(a)返回数组a中最大值所在的位置

# 对图像进行分类
preds = model.predict(x)
print(pred)
#输出[[2.69979779e-07 1.50991557e-03 9.40957308e-01 1.53805502e-09
  5.74169382e-02 2.00743049e-08 5.82429775e-13 1.47752353e-08
  6.25503671e-05 5.33912718e-08 4.72215740e-18 2.97202235e-16
  8.11012334e-19 7.12863546e-10 1.55264762e-17 5.29809076e-05
  7.24748874e-13 2.17059953e-23 6.66066933e-14 2.31473064e-14
  3.67295783e-22 1.20753088e-08 1.15534161e-15 1.17659593e-17
  1.29246865e-11 4.85833094e-14 8.04590889e-18 3.75492511e-16
  2.33098371e-12 1.86269444e-09 6.25299688e-20 8.06493845e-16
  3.69524827e-10 2.54514406e-15 6.45201473e-17 2.72551604e-14
  3.49192212e-15 1.93733091e-21 1.64267204e-16 1.12610542e-15
  1.17868511e-13 6.89566958e-18 1.75072841e-19]]

 2、 predict_classes()方法

      当使用predict_classes()方法进行预测时,返回的是类别的索引,即该样本所属的类别标签

model.predict_classes(image)

输出:array([2], dtype=int64),图像所在的种类。

 

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值