Keras模型性能监控与模型保存

深度学习模型训练过程中,监控模型性能并保存最佳模型是至关重要的。本文将介绍如何在Keras中实现这一功能,并通过紧急与非紧急车辆分类的案例进行详细说明。假设读者已具备一定的Keras模型构建基础,因此本文将重点介绍模型检查点的设置和使用。

步骤概览

将按照以下步骤进行:

  1. 加载数据集
  2. 数据预处理
  3. 创建训练集和验证集
  4. 定义模型架构
  5. 编译模型
  6. 训练模型并设置模型检查点
  7. 评估模型性能

1. 加载数据集

首先,需要加载所需的库和数据集。以下是加载数据集的代码示例:

import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline from keras.layers import Dense, InputLayer from keras.models import Sequential from keras.optimizers import Adam from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from google.colab import drive drive.mount('/content/drive') !unzip /content/drive/My\ Drive/Dataset.zip data = pd.read_csv('Dataset/emergency_classification.csv')

接下来,设置随机种子并查看数据集的前五行:

seed = 42 data.head()

然后,使用该文件加载图像,并将它们存储在名为“X”的变量中,同时将目标变量存储在名为“y”的变量中:

X = [] for img_name in data.image_names: img = plt.imread('Dataset/images/' + img_name) X.append(img) X = np.array(X) y = data.emergency_or_not.values

查看图像数组的形状:

X.shape

2. 数据预处理

接下来,将三维图像矩阵转换为一维。将224 x 224 x 3的三个维度转换为一维,即224*224*3 = 150528:

X = X.reshape(X.shape[0], 224*224*3) X.shape

检查图像的最小值和最大值:

X.min(), X.max()

将0到255的范围转换为0到1,并通过对每个像素值除以255来归一化:

X = X / X.max() X.min(), X.max()

3. 创建训练集和验证集

现在,将创建训练集和验证集:

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.3, random_state=seed) (X_train.shape, y_train.shape), (X_valid.shape, y_valid.shape)

4. 定义模型架构

输入形状将是这些图像的每个特征的数量,即224*224*3。然后使用两个隐藏层,每个隐藏层有100个神经元和sigmoid激活函数。最后是输出层,它有一个神经元和sigmoid激活函数:

model = Sequential() model.add(InputLayer(input_shape=(224*224*3,))) model.add(Dense(100, activation='sigmoid')) model.add(Dense(100, activation='sigmoid')) model.add(Dense(units=1, activation='sigmoid'))

5. 编译模型

接下来,将编译模型,并定义损失函数和优化器:

adam = Adam(lr=1e-5) model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])

6. 训练模型并设置模型检查点

现在将训练模型,并在此过程中定义模型检查点。首先,从Keras的“callbacks”模块导入模型检查点函数:

from keras.callbacks import ModelCheckpoint

定义模型检查点,指定保存模型权重的路径:

filepath = "best_weights.hdf5" checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max') callbacks_list = [checkpoint]

调用模型检查点函数,并定义要保存模型的路径,即best_weights.hdf5。然后定义要监控的指标,即验证集准确率val_accuracy。设置verbose=1以在每个epoch后打印摘要,并将save_best_only设置为True,以便仅保存最佳模型。最后,定义mode='max',因为希望获得最大的验证集准确率。接下来,将模型训练50个epoch,设置批量大小为128,并提供训练集和验证集:

model_history = model.fit(X_train, y_train, epochs=50, batch_size=128, validation_data=(X_valid, y_valid), callbacks=callbacks_list)

模型训练完成后,将评估模型性能。首先检查验证集上的准确率:

print('Accuracy on validation set:', accuracy_score(y_valid, model.predict_classes(X_valid)[:, 0]), '%') model.load_weights("best_weights.hdf5") print('Accuracy on validation set:', accuracy_score(y_valid, model.predict_classes(X_valid)[:, 0]), '%')
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485