使用VGG16模型进行图像分类:Python代码示例与分析
使用VGG16模型进行图像分类:Python代码示例与分析
本教程将演示如何使用预训练的VGG16模型和Keras库构建图像分类器。我们将详细介绍每一步,并提供完整的Python代码以及结果分析。
1. 导入必要的库python# 导入必要的包import osimport randomimport numpy as npimport pandas as pdimport tensorflow as tfimport matplotlib.pyplot as pltfrom tensorflow.keras.models import Sequential, Modelfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D, BatchNormalization, GlobalAveragePooling2Dfrom tensorflow.keras.preprocessing.image import ImageDataGeneratorfrom tensorflow.keras.preprocessing import imagefrom tensorflow.keras.applications.vgg16 import VGG16
2. 设置参数python# 设置参数train_dir = 'D:/LeStoreDownload/OneDrive/桌面/class/archive/seg_train/seg_train' # 训练集目录val_dir = 'D:/LeStoreDownload/OneDrive/桌面/class/archive/seg_test/seg_test' # 验证集目录classes = os.listdir(train_dir) # 获取类别列表batch_size = 64 # 批大小IMG_HEIGHT = 150 # 图像高度IMG_WIDTH = 150 # 图像宽度epochs = 10 # 训练轮数
请根据您的实际情况修改 train_dir 和 val_dir。
3. 创建图像生成器python# 创建图像生成器train_image_generator = ImageDataGenerator( rescale=1./255, # 归一化 horizontal_flip=True # 水平翻转)
val_image_generator = ImageDataGenerator( rescale=1./255 # 归一化)
train_data_gen = train_image_generator.flow_from_directory( batch_size=batch_size, # 批大小 directory=train_dir, # 训练集目录 shuffle=True, # 是否打乱数据 target_size=(IMG_HEIGHT, IMG_WIDTH), # 图像大小 class_mode='categorical' # 分类方式)
val_data_gen = val_image_generator.flow_from_directory( batch_size=batch_size, # 批大小 directory=val_dir, # 验证集目录 shuffle=True, # 是否打乱数据 target_size=(IMG_HEIGHT, IMG_WIDTH), # 图像大小 class_mode='categorical' # 分类方式)
total_train = len(train_data_gen) # 训练集样本数total_val = len(val_data_gen) # 验证集样本数
print('总训练数据批次数:', total_train)print('总验证数据批次数: ', total_val)
4. 加载 VGG16 模型并进行微调python# 加载 VGG16 模型并进行微调base_model = VGG16(weights='imagenet', include_top=False, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3))
for layer in base_model.layers: layer.trainable = False
model = Sequential()model.add(base_model)model.add(Flatten())model.add(Dense(1024, activation='relu'))model.add(Dense(512, activation='relu'))model.add(Dense(64, activation='relu'))model.add(Dense(len(classes), activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
5. 训练模型python# 训练模型history = model.fit( train_data_gen, # 训练集数据生成器 steps_per_epoch=total_train, # 每轮迭代的步数 epochs=epochs, # 训练轮数 validation_data=val_data_gen, # 验证集数据生成器 validation_steps=total_val # 验证集每轮迭代的步数)
6. 绘制训练过程中的准确率和损失值python# 绘制训练过程中的准确率和损失值acc = history.history['accuracy']val_acc = history.history['val_accuracy']loss = history.history['loss']val_loss = history.history['val_loss']
plt.figure(figsize=(8, 8))plt.subplot(2, 1, 1)plt.plot(acc, label='Training Accuracy')plt.plot(val_acc, label='Validation Accuracy')plt.legend(loc='lower right')plt.ylabel('Accuracy')plt.ylim([min(plt.ylim()), 1])plt.title('Training and Validation Accuracy')
plt.subplot(2, 1, 2)plt.plot(loss, label='Training Loss')plt.plot(val_loss, label='Validation Loss')plt.legend(loc='upper right')plt.ylabel('Cross Entropy')plt.ylim([0, 1.0])plt.title('Training and Validation Loss')plt.xlabel('epoch')
plt.show()
总结
本教程介绍了如何使用预训练的VGG16模型构建图像分类器。我们提供了完整的Python代码、步骤分解以及结果分析,希望能够帮助您快速入门深度学习图像分类。
请注意,这只是一个示例代码,具体的路径和参数设置可能需要根据您的实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/k5B 著作权归作者所有。请勿转载和采集!