1、导入相关库
from keras.preprocessing.image import ImageDataGenerator
import pathlib
from tensorflow import keras
from keras import layers
ImageDataGenerator的介绍
作用:通过实时数据增强生成批量图像数据向量。训练时该函数会无限循环生成数据,直到达到规定的epoch
次数为止。
2、加载数据
# 加载数据
train_idg = ImageDataGenerator(rescale=1. / 255)
valid_idg = ImageDataGenerator(rescale=1. / 255)
new_base_dir = pathlib.Path("D:\大学\大学作业\学习文件\python深度学习\实验三 \cats_vs_dogs_small")
- Path:访问实际文件系统的“真正路径”,Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即PosixPath和WindowsPath,前者用于操作UNIX(包括 Mac OS X)风格的路径,后者用于操作Windows风格的路径。
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')
flow_from_directory()
: 获取图像路径,生成批量增强数据。该方法只需指定数据所在的路径,而无需输入numpy形式的数据,也无需输入标签值,会自动返回对应的标签值。返回一个生成(x, y)
元组的DirectoryIterator
。
可以查看数据
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())
- flatten():是对多维数据的降维函数。
- flatten():默认缺省参数为0,也就是说flatten()和flatte(0)效果一样。
- python里的flatten(dim)表示,从第dim个维度开始展开,将后面的维度转化为一维.也就是说,只保留dim之前的维度,其他维度的数据全都挤在dim这一维。
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
- surmmary():能够保存训练过程以及参数分布图并在tensorboard显示
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)
注意:
#这里steps_per_epoch设置的是100,在上面中batch_size设置的是6,大小刚好
# case 1
#如果数据量小,batch_size设置比6大,则会报错
# 因为train样本数是600(猫300,狗300),小于100*32
# case 2
# 如果上面train_generator的batch_size是6,如果这里steps_per_epoch=100,那么不会报错
# 因为大小刚好
# case 3
# 如果上面train_generator的batch_size是7,如果这里steps_per_epoch=int(300/7),
# 那么不会报错,但是会有警告,因为也是不整除
# 不会报错因为int(300/7)*7< 600
# case 4
# 如果上面train_generator的batch_size是20,如果这里steps_per_epoch=100,照样报错
# 因为20*100>600
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()
#显示标签
plt.show()
标签:预测,卷积,batch,神经网络,train,add,import,model,size From: https://www.cnblogs.com/beichens/p/17402522.html