使用 VGG16 预训练模型数据预处理
时间: 2025-01-28 11:17:09 浏览: 35
### 使用 VGG16 预训练模型的数据预处理
#### 数据标准化
为了使输入数据适合 VGG16 模型,通常需要对图像进行标准化操作。这一步骤涉及调整图像大小至特定尺寸以及像素值的归一化。VGG16 接受固定大小 (224x224) 的彩色图片作为输入[^1]。
```python
from keras.preprocessing.image import img_to_array, load_img
import numpy as np
def preprocess_image(image_path):
image = load_img(image_path, target_size=(224, 224))
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
image /= 255.
return image
```
此函数加载指定路径下的图像文件,并将其转换成适用于 VGG16 输入的形式。注意这里进行了除以 255 的操作使得每个通道中的数值范围变为 [0, 1]。
#### 图像增广
除了基本的缩放外,在训练过程中还可以采用多种方式增加样本多样性,比如随机旋转、翻转等变换技术。这些方法有助于提升最终构建的新分类器性能[^2]。
```python
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
```
上述代码创建了一个 `ImageDataGenerator` 实例,它能够在线生成经过各种几何变形后的批量图像用于后续训练过程。
#### 特征提取
当准备好了前馈所需格式的数据之后,就可以利用 VGG16 卷积基部分来进行特征抽取工作了。这部分不会更新权重而是保持冻结状态以便迁移学习的应用场景下快速收敛。
```python
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.models import Model
base_model = VGG16(weights='imagenet', include_top=False)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)
features = model.predict(preprocess_image('path/to/image.jpg'))
```
这段脚本展示了如何实例化不带顶部全连接层 (`include_top=False`) 的 VGG16 并获取第五个最大池化层(`'block5_pool'`) 输出的结果作为新任务所需的高级语义表示形式。
阅读全文
相关推荐


















