使用MobileNetV2对图像进行特征提取和分类python代码
时间: 2023-06-18 08:05:03 浏览: 233
以下是使用MobileNetV2进行图像分类的Python代码:
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import Dense, Dropout, GlobalAveragePooling2D
from tensorflow.keras.models import Model
# 定义输入图像的大小
IMAGE_SIZE = 224
# 定义训练数据和验证数据的文件夹路径
TRAIN_PATH = 'path/to/train/folder'
VALID_PATH = 'path/to/validation/folder'
# 使用ImageDataGenerator进行数据增强
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
valid_datagen = ImageDataGenerator(rescale=1./255)
# 加载训练数据和验证数据
train_generator = train_datagen.flow_from_directory(
TRAIN_PATH,
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=32,
class_mode='categorical')
valid_generator = valid_datagen.flow_from_directory(
VALID_PATH,
target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=32,
class_mode='categorical')
# 加载预训练的MobileNetV2模型
base_model = MobileNetV2(input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), include_top=False, weights='imagenet')
# 添加全局平均池化层
x = base_model.output
x = GlobalAveragePooling2D()(x)
# 添加全连接层和dropout层
x = Dense(128, activation='relu')(x)
x = Dropout(0.2)(x)
# 添加softmax分类器
predictions = Dense(train_generator.num_classes, activation='softmax')(x)
# 构建完整的模型
model = Model(inputs=base_model.input, outputs=predictions)
# 冻结MobileNetV2的所有层
for layer in base_model.layers:
layer.trainable = False
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(train_generator, epochs=10, validation_data=valid_generator)
```
在上面的代码中,我们首先使用`ImageDataGenerator`对训练数据和验证数据进行数据增强,然后使用`MobileNetV2`加载预训练的模型,并添加全局平均池化层、全连接层和softmax分类器,构建一个完整的模型。然后我们冻结了MobileNetV2的所有层,只训练新添加的全连接层和分类器。最后,我们使用`compile`方法编译模型,并使用`fit`方法训练模型。
阅读全文