猫狗识别python代码
时间: 2023-08-29 16:05:32 浏览: 123
以下是一个简单的猫狗识别的 Python 代码,使用了 TensorFlow 和 Keras 框架:
```python
import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator
# 设置训练、验证、测试数据的目录
train_dir = 'train'
validation_dir = 'validation'
test_dir = 'test'
# 设置图像的大小、通道数以及批量大小
img_width, img_height = 150, 150
input_shape = (img_width, img_height, 3)
batch_size = 16
# 创建训练数据生成器
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
# 创建验证数据生成器
validation_datagen = ImageDataGenerator(rescale=1./255)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
# 构建模型
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
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=['acc'])
# 训练模型
history = model.fit_generator(
train_generator,
steps_per_epoch=train_generator.n // batch_size,
epochs=30,
validation_data=validation_generator,
validation_steps=validation_generator.n // batch_size)
# 测试模型
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
test_loss, test_acc = model.evaluate_generator(test_generator, steps=test_generator.n // batch_size)
print('Test accuracy:', test_acc)
```
该代码使用了卷积神经网络(Convolutional Neural Network,CNN)进行图像分类,将图像大小设置为 150x150,并对图像进行了归一化处理。在模型的最后一层使用了 sigmoid 激活函数,输出0或1来表示是猫还是狗。训练时使用了 RMSprop 优化器和 binary_crossentropy 作为损失函数。测试时调用了 evaluate_generator 方法计算模型的测试准确率。
阅读全文