1、将图片数据分为训练集和验证集,训练集中猫和狗各300张图片,验证集中猫和狗各200张图片。
2、构建一个神经网络模型,并使用划分好的训练集数据训练模型,使用验证集的数据验证模型,训练迭代30次,建议使用生成器。
3、获取训练过程中的训练精度、验证精度,并使用matplotlib来绘制精度变化曲线,要求模型的验证精度达到80%以上(注意不是训练精度),可以使用数据增强、预训练的卷积神经网络等方法。
4、使用训练好的模型做猫狗预测,至少预测2张图片(有猫有狗),只需要在控制台中打印输出预测的结果即可。
5、撰写实验报告,将实验代码、预测结果和绘制精度变化曲线截图粘贴到实验报告中。
相关步骤:
1、导入相关库
from keras.preprocessing.image import ImageDataGenerator
import pathlib
from tensorflow import keras
from keras import layers
2、加载数据
# 加载数据
train_idg = ImageDataGenerator(rescale=1. / 255)
valid_idg = ImageDataGenerator(rescale=1. / 255)
new_base_dir = pathlib.Path("D:\大学\大学作业\学习文件\python深度学习\实验三 \cats_vs_dogs_small")
train_dataset = train_idg.flow_from_directory(
new_base_dir / "train",
target_size=(180, 180),
batch_size=6,
class_mode='binary')
validation_dataset = valid_idg.flow_from_directory(
new_base_dir / "validation",
target_size=(180, 180),
batch_size=6,
class_mode='binary')
可以查看数据
for i in train_dataset:
print(i)
查看数据格式
for data_batch, labels_batch in train_dataset:
print("data batch shape:", data_batch.shape)
print("labels batch shape:", labels_batch.shape)
break
3、构建模型
from keras import models
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = models.Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(180, 180, 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(Dense(1, activation='sigmoid'))
model.summary()
4、编译模型
# 编译模型
model.compile(loss="binary_crossentropy",
optimizer="rmsprop",
metrics=["accuracy"])
5、训练模型
history = model.fit(
train_dataset,epochs=30,validation_data=validation_dataset,steps_per_epoch=100,val idation_steps=50)
6、训练精度,验证精度的可视化,绘制折线图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
train_acc = history.history.get('accuracy')
valid_acc = history.history.get('val_accuracy')
data_x = range(1, len(train_acc) + 1)
plt.plot(data_x, train_acc, color='red', label='训练精度')
plt.plot(data_x, valid_acc, color='green', label='验证精度')
plt.legend()
可视化结果
实验分析与结论
使用卷积神经网络实现猫和狗的预测,使用的是二分类,因此使用'sigmoid'来进行对类别的分类。该实验也是要按照加载数据、构建深度学习模型、训练模型(需要添加验证集)、预测的步骤来进行。此实验所训练模型数据较低,在设置实验训练数据大小时需要匹配。
标签:预测,训练,卷积,add,batch,神经网络,train,import,model From: https://www.cnblogs.com/beichens/p/17420939.html