欢迎访问宙启技术站
智能推送

在Python中使用Keras应用程序包中的VGG19模型进行图像分类器训练的示例

发布时间:2023-12-18 03:55:17

Keras是一个用于构建深度学习模型的高级API,它提供了许多预训练的模型,包括 VGG19。VGG19是一个已经在大型图像数据集上进行了训练的深度卷积神经网络模型,用于图像分类任务。

以下是一个使用Keras中的VGG19模型进行图像分类器训练的示例:

1. 导入必要的库和模块:

import numpy as np
import keras
from keras.applications.vgg19 import VGG19
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, Flatten
from keras.optimizers import Adam

2. 定义数据生成器:

train_data_dir = 'path/to/training/data'
validation_data_dir = 'path/to/validation/data'
img_height, img_width = 224, 224
batch_size = 32

train_datagen = ImageDataGenerator(rescale=1. / 255)
validation_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')

validation_generator = validation_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')

3. 加载VGG19模型和权重:

base_model = VGG19(weights='imagenet', include_top=False, input_shape=(img_height, img_width, 3))

VGG19模型中的 include_top 参数设置为 False,表示除了最后的全连接层外,模型的其余部分会被加载。input_shape 参数指定输入图像的形状。

4. 构建全连接层和分类器:

model = Sequential()
model.add(base_model)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(train_generator.num_classes, activation='softmax'))

5. 编译和训练模型:

model.compile(optimizer=Adam(lr=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

epochs = 10

model.fit_generator(
    train_generator,
    steps_per_epoch=train_generator.samples // batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // batch_size,
    epochs=epochs)

在训练模型之前,我们需要先编译模型。在本例中,我们使用 Adam 优化器,交叉熵作为损失函数,并设置学习率为 0.0001。接下来,我们使用 fit_generator 函数来训练模型,并指定训练和验证的数据生成器。

6. 评估模型:

test_data_dir = 'path/to/test/data'
test_datagen = ImageDataGenerator(rescale=1. / 255)
test_generator = test_datagen.flow_from_directory(
    test_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')

scores = model.evaluate_generator(test_generator, steps=test_generator.samples // batch_size)
print("Loss: ", scores[0])
print("Accuracy: ", scores[1])

使用与训练时相同的预处理方法加载测试数据,并使用 evaluate_generator 函数计算模型在测试数据上的损失和准确率。

这个示例展示了如何使用Keras中的VGG19模型进行图像分类器训练。你可以根据自己的数据和需求进行适当的修改和调整。