深度可分离卷积 二分类 训练自己的图像数据集 避免过拟合 代码
时间: 2023-09-12 17:13:18 浏览: 85
以下是一个基于深度可分离卷积的二分类模型训练代码示例:
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, SeparableConv2D, MaxPooling2D, Dropout, Flatten, Dense
# 设置训练和验证数据集的路径
train_dir = '/path/to/training/dataset'
validation_dir = '/path/to/validation/dataset'
# 设置图像增强器
train_datagen = ImageDataGenerator(
rescale=1./255, # 图像归一化
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' # 填充缺失像素的方式
)
validation_datagen = ImageDataGenerator(rescale=1./255)
# 定义训练和验证数据生成器
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150), # 调整输入图像大小(宽度、高度)
batch_size=32, # 每个批次的图像数量
class_mode='binary' # 二分类问题
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
# 构建模型,使用深度可分离卷积
model = Sequential([
SeparableConv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D((2, 2)),
SeparableConv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
SeparableConv2D(128, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
SeparableConv2D(128, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dropout(0.5),
Dense(512, activation='relu'),
Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型
history = model.fit(
train_generator,
steps_per_epoch=100, # 一个 epoch 中的步数(每个 epoch 包含多少个批次)
epochs=100, # 训练 epoch 的数量
validation_data=validation_generator,
validation_steps=50 # 验证 epoch 中的步数
)
```
在上述代码中,我们使用了深度可分离卷积和数据增强技术来避免过拟合。同时,我们还使用了 Dropout 层来进一步减少过拟合。
需要注意的是,这只是一个示例代码,具体的实现可能需要根据你的数据集和问题进行调整。
阅读全文