猫狗大战代码
时间: 2023-08-30 19:06:04 浏览: 40
猫狗大战是一个经典的计算机视觉任务,要求根据给定的图片判断其中是猫还是狗。以下是一个简单的基于卷积神经网络(CNN)的猫狗分类代码示例:
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 设置训练数据和验证数据的路径
train_dir = "train/"
val_dir = "val/"
# 设置数据增强器
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
val_datagen = ImageDataGenerator(rescale=1./255)
# 读取训练数据和验证数据
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
val_generator = val_datagen.flow_from_directory(
val_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
# 构建卷积神经网络
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
# 训练模型
history = model.fit(
train_generator,
steps_per_epoch=100,
epochs=30,
validation_data=val_generator,
validation_steps=50,
verbose=2
)
# 保存模型
model.save('cat_dog_classifier.h5')
```
在代码中,我们首先设置了训练数据和验证数据的路径,并使用`ImageDataGenerator`设置了数据增强器,包括图像旋转、平移、缩放、翻转等。然后使用`flow_from_directory`读取训练数据和验证数据,并设置了目标尺寸、批量大小和分类方式。接着,我们构建了一个简单的卷积神经网络模型,并使用`compile`方法编译了模型,设置了损失函数、优化器和评价指标。最后,我们使用`fit`方法训练模型,并保存了模型。
阅读全文