keras中VGG19预训练模型的使用

本文介绍如何使用Keras加载VGG19预训练模型进行图像分类,并演示提取模型中间层特征的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16、Xception、ResNet50、InceptionV3 4个。

 

VGG19在keras中的定义:

def VGG19(include_top=True, weights='imagenet',
          input_tensor=None, input_shape=None,
          pooling=None,
          classes=1000)
  1. include_top: 是否包含最后的3个全连接层

  2. weights: 定义为‘imagenet’,表示加载在imagenet数据库上训练的预训练权重,定义为None则不加载权重,参数随机初始化

 

包含最后3个全连接层的VGG19模型下载地址:  https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels.h5

不包含最后3个全连接层的VGG19模型下载地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5

 

不包含全连接层的VGG19模型文件名称是" vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5 " ,文件大小约80MB;

包含全连接层的VGG19模型文件名称是 " vgg19_weights_tf_dim_ordering_tf_kernels.h5 " ,文件大小约575MB

 

ubuntu中,下载的VGG19模型文件的本地路径是 ~/.keras/models/ , .keras是一个隐藏文件夹。可以预先下载模型文件放到对应目录下,程序执行时检测到存在模型文件就不会再下载了。

 

 

使用VGG19预训练模型分类图片的例子

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np

base_model = VGG19(weights='imagenet', include_top=True)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))  # 加载图像,归一化大小
x = image.img_to_array(img)   # 序列化
x = np.expand_dims(x, axis=0)  # 展开
x = preprocess_input(x)       # 预处理到0~1
out = base_model.predict(x)  # 预测结果,1000维的向量
print(out.shape)   # (1,1000)


程序首先加载带3个全连接层的VGG19模型,然后读入图片并做格式转换和归一化等处理后执行VGG模型预测,预测结果out是一个1000维的向量,代表了预测结果分别属于10000个分类的概率,形状是(1,1000),out内容如下:

 


使用VGG19预训练模型提取VGG19网络中任意层的输出特征的例子


上个例子可以看到keras对VGG网络的封装异常好,简单几行代码就可以分类图片。keras中VGG预训练参数模型另一个更常用的应用是可以提取VGG网络中任意一层的特征。


以下例子提取的是VGG19网络中第5个卷积层的输出特征(也是第1个全连接层的输入特征)

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np

base_model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
block5_pool_features = model.predict(x)
print(block5_pool_features.shape) #(1, 7, 7, 512)

 

base_model.get_layer('block5_pool')中的block5_pool参数定义了获取的是第5个卷积层的输出。第5层的输出是一个 1×7×7×512的向量,如下:

 

也可以设置为加载最后3个全连接层的VGG19网络,就可以获取最后3个全连接层的输出了:

# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np
base_model = VGG19(weights='imagenet', include_top=True)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
fc2 = model.predict(x)
print(fc2.shape)  #(1, 4096)


加了全连接层,所以base_model.get_layer('fc2') 里参数也可以是 flatten、fc1、fc2和predictions 。

VGG19各个模块在keras中定义的名称如下,可以根据名称轻松获取该层特征:

### 下载适用于 Keras 版本 3 的 VGG19 预训练模型 Keras 提供了内置的 API 来下载和加载预训练VGG19 模型。为了确保兼容性,需要确认所使用Keras 版本是否支持 VGG19 模型以及预训练权重。以下是详细的实现方法和注意事项。 #### 确保 Keras 版本兼容 首先,检查当前安装的 Keras 版本是否为版本 3 或更高版本。可以使用以下代码验证版本: ```python import keras print(keras.__version__) ``` 如果版本低于 3,则需要升级 Keras。可以通过以下命令进行升级: ```bash pip install --upgrade keras ``` #### 使用 Keras 内置函数加载 VGG19 模型 Keras 提供了 `keras.applications.VGG19` 函数来加载预训练VGG19 模型。此函数允许指定是否包含顶部全连接层(即分类器部分)以及加载预训练权重。以下是加载 VGG19 模型的示例代码: ```python from keras.applications.vgg19 import VGG19 # 加载包含预训练权重的 VGG19 模型,不包括顶层分类器 model = VGG19(weights='imagenet', include_top=False) # 打印模型架构以验证加载成功 model.summary() ``` #### 下载预训练权重文件 如果网络环境无法直接通过上述方法加载预训练权重,可以手动下载权重文件并加载到模型中。VGG19预训练权重文件可以从以下链接下载[^1]: - [VGG19 权重文件](https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels.h5) 下载完成后,将权重文件放置在本地路径中,并通过以下方式加载: ```python from keras.applications.vgg19 import VGG19 # 指定本地权重文件路径 weight_path = 'path_to_your_downloaded_file/vgg19_weights_tf_dim_ordering_tf_kernels.h5' # 加载模型时指定本地权重文件 model = VGG19(weights=weight_path, include_top=False) model.summary() ``` #### 注意事项 1. **硬件性能**:如果使用 CPU 进行训练或推理,可能会导致较长的运行时间。例如,微调 VGG 预训练模型可能需要数小时的时间[^2]。建议尽可能使用 GPU 加速计算。 2. **模型配置**:在实际应用中,可以根据需求调整模型架构,例如修改顶层分类器或冻结某些层参数。以下是配置优化器和训练模型的示例代码[^3]: ```python model.compile(optimizer=keras.optimizers.Adam(1e-4), loss="sparse_categorical_crossentropy") callbacks = [ keras.callbacks.ModelCheckpoint("vgg19_finetuned.keras", save_best_only=True) ] epochs = 50 model.fit(train_dataset, epochs=epochs, validation_data=valid_dataset, callbacks=callbacks, verbose=2) ``` #### 总结 通过 Keras 内置的 `VGG19` 函数或手动下载权重文件,可以轻松加载适用于 Keras 版本 3 的 VGG19 预训练模型。同时,注意硬件性能对训练时间的影响,并根据具体任务调整模型架构和优化器配置。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值