用卷积神经网络写一个完整的猫狗识别代码
时间: 2023-09-14 11:09:27 浏览: 45
好的,以下是一个基于卷积神经网络的猫狗识别代码:
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 设置训练集和验证集的路径
train_dir = 'train/'
validation_dir = 'validation/'
# 设置图像的大小和批量大小
img_size = 224
batch_size = 32
# 设置训练集和验证集的图像生成器
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)
validation_datagen = ImageDataGenerator(rescale=1./255)
# 使用图像生成器从文件夹中读取图像数据
train_generator = train_datagen.flow_from_directory(train_dir,
target_size=(img_size, img_size),
batch_size=batch_size,
class_mode='binary')
validation_generator = validation_datagen.flow_from_directory(validation_dir,
target_size=(img_size, img_size),
batch_size=batch_size,
class_mode='binary')
# 构建卷积神经网络模型
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(img_size, img_size, 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.Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
metrics=['accuracy'])
# 训练模型
history = model.fit(train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=50,
validation_data=validation_generator,
validation_steps=validation_generator.samples // batch_size)
```
这个代码会从 `train/` 和 `validation/` 文件夹中读取图像数据,并使用 `ImageDataGenerator` 类对图像数据进行增强和预处理。然后使用 `Sequential` 类构建卷积神经网络模型,并使用 `compile` 方法编译模型。最后使用 `fit` 方法训练模型,并保存训练历史信息到 `history` 变量中。