Tensorflow入门——训练结果的保存与加载(Keras方式实现)

本文详细介绍了如何使用Keras进行模型的保存和加载,包括保存整个模型、仅保存参数值以及选择不同的保存格式。同时,通过具体示例展示了如何在Python环境中利用Keras进行模型的保存和重新加载,并验证了加载后的模型预测准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇Tensorflow入门——训练结果的保存与加载 讲到了原生的tensorflow的模型保存和重新加载的方法

这一篇将演示使用keras方式来进行模型的保存和重新加载操作

我们以Tensorflow入门——利用神经网络实现线性回归的预测(Keras方式实现)中的代码为示例

====================================================

模型的保存

1.保存模型和参数值:

直接使用model的save方法就行了

model.save(SAVE_PATH + 'model')

保存完成以后会生成一个文件

9ccd25ec5cc7ad4063cf933a24d4d0dd17b.jpg

这个文件中已经包含了模型和参数值(在keras中称其为参数的权重weight)

2.保存tensorflow格式的参数值

当然也可以通过model的save_weights方法来仅仅保存参数值

model.save_weights(SAVE_PATH + 'model')

保存结果为3个文件

9a0eb98908d24e84b192869cc82fb02e830.jpg

3.保存keras格式的参数值(权重)

当然也可以通过加参数save_format=’HDF5‘来保存为keras自己的格式

model.save_weights(SAVE_PATH + 'model',save_format='HDF5')

结果为1个文件

899a8ef1fe20e7ff8edd16621c356057543.jpg

====================================================

模型的加载

keras方式下,模型的重新加载也非常方便,只需要使用tf.keras.models.load_model方法就可以了

model = tf.keras.models.load_model(SAVE_PATH + 'model')

然后就可以直接开始预测或者继续训练了

我们可以看到加载完成以后预测结果的匹配度也是非常高的

重新加载,开始预测。。。
x= [[17.26361403]] y预测= [[69.43323]] y实际= 68.75506277761912
x= [[28.45987141]] y预测= [[129.40248]] y实际= 128.4311146380358
x= [[11.94274062]] y预测= [[40.93363]] y实际= 40.39480748040985
x= [[28.80726104]] y预测= [[131.26317]] y实际= 130.2827013539594
x= [[6.58173752]] y预测= [[12.219099]] y实际= 11.820660992566015
x= [[0.6260831]] y预测= [[-19.680502]] y实际= -19.92297708416467
x= [[8.16634666]] y预测= [[20.706564]] y实际= 20.26662770229098
x= [[3.43428052]] y预测= [[-4.6392703]] y实际= -4.955284813210653
x= [[12.49453332]] y预测= [[43.88914]] y实际= 43.33586260331026
x= [[13.12218895]] y预测= [[47.25098]] y实际= 46.68126709583187

继续训练完成,开始预测。。。
x= [[25.56780887]] y预测= [[113.69811]] y实际= 113.01642126073325
x= [[24.21520147]] y预测= [[106.44765]] y实际= 105.80702382315717
x= [[28.86416988]] y预测= [[131.36786]] y实际= 130.58602545854217
x= [[11.80319228]] y预测= [[39.914658]] y实际= 39.6510148555444
x= [[6.46967581]] y预测= [[11.3250265]] y实际= 11.223372071751736
x= [[25.55034589]] y预测= [[113.604515]] y实际= 112.9233436086294
x= [[4.23831593]] y预测= [[-0.6358937]] y实际= -0.6697760851299535
x= [[7.33611763]] y预测= [[15.969476]] y实际= 15.841506981622341
x= [[13.53717551]] y预测= [[49.209446]] y实际= 48.89314549229354
x= [[0.56005254]] y预测= [[-20.352753]] y实际= -20.274919973128494

====================================================

完整代码如下,在python3.6.8、tensorflow1.13/tensorflow2.0.0-alpha0 环境下成功运行

https://github.com/yukiti2007/sample/blob/master/python/tensorflow/wx_b_nn_keras_save.py

import random

import numpy as np
import tensorflow as tf

SAVE_PATH = "D:/test/tf1/xw_b_nn_keras/"


def create_data(for_train=False):
    w = 5.33
    b = -23.26
    x = random.random() * 30
    y = w * x + b

    if for_train:
        noise = (random.random() - 0.5) * 10
        y += noise

    return x, y


def train():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Dense(10))
    model.add(tf.keras.layers.Dense(10))
    model.add(tf.keras.layers.Dense(1))
    model.compile(optimizer='Adam',
                  loss='mse')

    for _ in range(5000):
        x_train, y_train = create_data(True)
        x_train = np.array(x_train, ndmin=2)
        y_train = np.array(y_train, ndmin=2)
        model.fit(x_train, y_train)

    print("训练完成,开始预测。。。")
    for _ in range(10):
        x_data, y_data = create_data(False)
        x_data = np.array(x_data, ndmin=2)
        prediction_value = model.predict(x_data)
        print("x=", x_data, "y预测=", prediction_value, "y实际=", y_data)

    model.save(SAVE_PATH + 'model')


def predict():
    model = tf.keras.models.load_model(SAVE_PATH + 'model')

    print("重新加载,开始预测。。。")
    for _ in range(10):
        x_data, y_data = create_data(False)
        x_data = np.array(x_data, ndmin=2)
        prediction_value = model.predict(x_data)
        print("x=", x_data, "y预测=", prediction_value, "y实际=", y_data)

    print("继续训练")
    for _ in range(5000):
        x_train, y_train = create_data(True)
        x_train = np.array(x_train, ndmin=2)
        y_train = np.array(y_train, ndmin=2)
        model.fit(x_train, y_train)

    print("继续训练完成,开始预测。。。")
    for _ in range(10):
        x_data, y_data = create_data(False)
        x_data = np.array(x_data, ndmin=2)
        prediction_value = model.predict(x_data)
        print("x=", x_data, "y预测=", prediction_value, "y实际=", y_data)


if __name__ == "__main__":
    train()
    predict()

转载于:https://my.oschina.net/u/4105485/blog/3034160

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值