卷积神经网络-猫狗识别
时间: 2024-12-30 09:17:07 浏览: 12
### 使用卷积神经网络实现猫狗图片分类
#### 构建模型架构
为了构建一个有效的猫狗二元分类器,可以采用经典的卷积神经网络(CNN)结构。CNN特别适合处理图像数据,因为其能够自动提取特征并减少人工设计特征的工作量。
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])
```
此代码定义了一个简单的CNN模型,其中包含了多个卷积层和池化层用于学习空间层次上的局部模式,并通过全连接层完成最终的分类任务[^1]。
#### 加载与预处理数据集
对于输入到模型中的每张图片都需要做标准化处理,使得不同尺寸或颜色分布的数据能被统一表示:
```python
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
```
这段脚本展示了如何利用`ImageDataGenerator`类来增强训练样本多样性以及调整测试集中图像大小至固定规格以便于喂入网络中进行计算[^2].
#### 编译及训练模型
编译阶段指定了损失函数、优化算法以及其他评价指标;而训练过程则是让机器不断迭代更新权重直至达到满意的性能水平:
```python
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit(training_set,
steps_per_epoch=len(training_set),
epochs=25,
validation_data=test_set,
validation_steps=len(test_set))
```
上述命令设置了Adam作为梯度下降方法之一,并选择了交叉熵作为衡量误差的标准,在此基础上执行了为期二十五轮次的学习循环以期获得更好的泛化能力.
#### 模型评估与保存
当完成了全部周期之后就可以对新收集来的未知类别对象做出预测判断了。同时也可以把已经训练好的参数序列化存盘下来方便以后重复调用而不必每次都重新开始漫长的拟合流程.
```python
# Save the entire model to a HDF5 file.
model.save('cat_dog_classifier.h5')
# Later you can recreate the exact same model purely from the file:
#from tensorflow.keras.models import load_model
#new_model = load_model('cat_dog_classifier.h5')
```
这样就实现了完整的从准备环境到最后部署上线的一套工作流.
阅读全文