上一篇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()