猫狗图识别python代码
时间: 2023-09-08 11:14:55 浏览: 40
以下是使用Python和Keras实现猫狗图像识别的代码:
1. 导入必要的库和模块:
```
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array
from keras.utils import to_categorical
import matplotlib.pyplot as plt
```
2. 设置训练和测试数据集路径:
```
train_dir = 'train'
test_dir = 'test'
```
3. 定义图像的大小和批次大小:
```
img_width, img_height = 150, 150
batch_size = 20
```
4. 使用ImageDataGenerator从文件夹中读取数据并进行数据增强:
```
train_datagen = ImageDataGenerator(
rescale=1./255, # 将像素值缩放到[0,1]之间
shear_range=0.2, # 随机剪裁
zoom_range=0.2, # 随机缩放
horizontal_flip=True) # 随机翻转
test_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')
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
```
5. 定义卷积神经网络模型:
```
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.summary()
```
6. 编译模型并训练:
```
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=50,
validation_data=test_generator,
validation_steps=test_generator.samples // batch_size)
```
7. 绘制训练和验证准确率和损失的图表:
```
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))
plt.plot(epochs, acc, 'b', label='Training accuracy')
plt.plot(epochs, val_acc, 'r', label='Validation accuracy')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'b', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
```
8. 使用模型预测测试集中的图像:
```
test_filenames = os.listdir(test_dir)
test_images = []
for filename in test_filenames:
img = load_img(os.path.join(test_dir, filename), target_size=(img_width, img_height))
img = img_to_array(img) / 255.
test_images.append(img)
test_images = np.array(test_images)
predictions = model.predict(test_images)
for i, prediction in enumerate(predictions):
if prediction < 0.5:
print(test_filenames[i] + " is a cat")
else:
print(test_filenames[i] + " is a dog")
```
这就是使用Python和Keras实现猫狗图像识别的代码。