Keras模型保存与加载

模型加载

keras.models.load_model

from sklearn.datasets import make_circles
from os.path import exists
from keras.models import Sequential, load_model
from keras.layers import Dense

"""创建样本"""
x_train, y_train = make_circles(n_samples=256, noise=.1, factor=.4)

"""建模"""
filepath = 'model.hdf5'
if exists(filepath):
    model = load_model(filepath)  # 加载模型
else:
    model = Sequential()
    model.add(Dense(units=25, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile('RMSprop', 'binary_crossentropy', ['acc'])
    model.fit(x_train, y_train, epochs=125)
    model.save(filepath)  # 保存模型

"""模型评估"""
x_test, y_test = make_circles(n_samples=128, noise=.1, factor=.4)
loss, acc = model.evaluate(x_test, y_test)
print('loss %g  acc %g' % (loss, acc))

自动保存

keras.callbacks.ModelCheckpoint

from sklearn.datasets import make_circles
from os.path import exists
from keras.models import Sequential, load_model
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint

"""创建样本"""
x_train, y_train = make_circles(n_samples=512, noise=.1, factor=.4)

"""建模"""
filepath = 'model.hdf5'
if exists(filepath):
    model = load_model(filepath)  # 加载模型
else:
    model = Sequential()
    model.add(Dense(25, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile('RMSprop', 'binary_crossentropy', ['acc'])
    model.fit(
        x_train, y_train, epochs=100, verbose=2,
        validation_split=.125,
        callbacks=[ModelCheckpoint(filepath, save_best_only=True)]
    )

"""模型评估"""
x_test, y_test = make_circles(n_samples=256, noise=.1, factor=.4)
loss, acc = model.evaluate(x_test, y_test)
print('loss %g  acc %g' % (loss, acc))

自动保存+结束

keras.callbacks.EarlyStopping

from sklearn.datasets import make_circles
from os.path import exists
from keras.models import Sequential, load_model
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint, EarlyStopping

"""创建样本"""
x_train, y_train = make_circles(n_samples=512, noise=.1, factor=.4)

"""建模"""
filepath = 'model.hdf5'
if exists(filepath):
    model = load_model(filepath)  # 加载模型
else:
    model = Sequential()
    model.add(Dense(25, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile('RMSprop', 'binary_crossentropy', ['acc'])
    callbacks = [
        EarlyStopping(monitor='val_acc', patience=10),
        ModelCheckpoint(filepath, 'val_acc', save_best_only=True)
    ]
    model.fit(
        x_train, y_train, epochs=999, verbose=2,
        validation_split=.125, callbacks=callbacks
    )

"""模型评估"""
x_test, y_test = make_circles(n_samples=256, noise=.1, factor=.4)
loss, acc = model.evaluate(x_test, y_test)
print('loss %g  acc %g' % (loss, acc))

面向对象版

from sklearn.datasets import make_circles
from os.path import exists
from keras.models import Sequential, load_model
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint, EarlyStopping


class Conf:
    """配置"""
    filepath = 'model.hdf5'  # 模型保存路径
    patience = 10  # 进步停止轮数
    units = 25  # 神经元数量
    validation_split = .125  # 验证切分率
    batch_size = 512


class Model:
    def __init__(self):
        """模型初始化"""
        self.model = None
        if exists(Conf.filepath):
            self.model = load_model(Conf.filepath)
        else:
            x_train, y_train = make_circles(n_samples=512, noise=.1, factor=.4)
            self.modeling(x_train, y_train)

    def modeling(self, x, y):
        """建模"""
        model = Sequential()
        model.add(Dense(Conf.units, activation='relu'))
        model.add(Dense(1, activation='sigmoid'))
        model.compile('RMSprop', 'binary_crossentropy', ['acc'])
        callbacks = [
            EarlyStopping(patience=Conf.patience),
            ModelCheckpoint(Conf.filepath, save_best_only=True)
        ]
        model.fit(
            x, y, batch_size=Conf.batch_size, epochs=9999, verbose=2,
            validation_split=Conf.validation_split, callbacks=callbacks
        )
        self.model = model

    def evaluate(self, x, y):
        """模型评估"""
        loss, acc = self.model.evaluate(x, y)
        print('loss %g  acc %g' % (loss, acc))


if __name__ == '__main__':
    model = Model()
    x_test, y_test = make_circles(n_samples=256, noise=.1, factor=.4)
    model.evaluate(x_test, y_test)
### TensorFlow.NET Keras保存模型 #### 保存整个模型 可以使用`Model.Save`方法将整个模型(包括模型结构、权重和训练配置)保存为一个文件。以下是一个简单的示例: ```csharp using TensorFlow.Keras.Models; using TensorFlow.Keras.Layers; using TensorFlow.Keras.Optimizers; // 构建一个简单的模型 var model = new Sequential(); model.Add(new Dense(64, activation: "relu", input_shape: new int[] { 10 })); model.Add(new Dense(1, activation: "sigmoid")); model.Compile(optimizer: new Adam(), loss: "binary_crossentropy", metrics: new string[] { "accuracy" }); // 保存整个模型 model.Save("saved_model_path"); ``` #### 仅保存模型权重 使用`Model.SaveWeights`方法可以仅保存模型的权重。示例如下: ```csharp // 保存模型权重 model.SaveWeights("weights_path.h5"); ``` ### TensorFlow.NET Keras加载模型 #### 加载整个模型 使用`Model.LoadModel`方法加载之前保存的整个模型。示例如下: ```csharp // 加载整个模型 var loadedModel = Model.LoadModel("saved_model_path"); ``` #### 加载模型权重 先定义模型相同结构的模型,然后使用`Model.LoadWeights`方法加载权重。示例如下: ```csharp // 定义模型相同结构的模型 var newModel = new Sequential(); newModel.Add(new Dense(64, activation: "relu", input_shape: new int[] { 10 })); newModel.Add(new Dense(1, activation: "sigmoid")); newModel.Compile(optimizer: new Adam(), loss: "binary_crossentropy", metrics: new string[] { "accuracy" }); // 加载模型权重 newModel.LoadWeights("weights_path.h5"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值