【Tensorflow2.0】訓練結果的保存與加載(Keras方式實現)

上一篇Tensorflow入門——訓練結果的保存與加載 講到了原生的tensorflow的模型保存和從新加載的方法python

這一篇將演示使用keras方式來進行模型的保存和從新加載操做git

咱們以Tensorflow入門——利用神經網絡實現線性迴歸的預測(Keras方式實現)中的代碼爲示例github

====================================================網絡

模型的保存dom

1.保存模型和參數值:.net

直接使用model的save方法就好了orm

model.save(SAVE_PATH + 'model')

保存完成之後會生成一個文件blog

這個文件中已經包含了模型和參數值(在keras中稱其爲參數的權重weight)get

2.保存tensorflow格式的參數值it

固然也能夠經過model的save_weights方法來僅僅保存參數值

model.save_weights(SAVE_PATH + 'model')

保存結果爲3個文件

3.保存keras格式的參數值(權重)

固然也能夠經過加參數save_format=’HDF5‘來保存爲keras本身的格式

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

結果爲1個文件

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

模型的加載

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.八、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()
相關文章
相關標籤/搜索