一、总结
一句话总结:
模型的话也是比较普通的卷积神经网络,就是图像数据用的生成器:ImageDataGenerator
1、ImageDataGenerator.flow_from_directory常用参数的意思?
|||-begin
train_generator = train_datagen.flow_from_directory( train_dir, # 目标目录 target_size=(150, 150), # 将所有图像的大小调整为 150×150 batch_size=20, class_mode='binary') # 因为使用了binary_crossentropy 损失,所以需要用二进制标签
|||-end
directory:【目标目录的路径】:目标目录的路径。每个类应该包含一个子目录。任何在子目录树下的 PNG, JPG, BMP, PPM 或 TIF 图像,都将被包含在生成器中。
target_size:【所有的图像将被调整到的尺寸】:整数元组 (height, width),默认:(256, 256)。所有的图像将被调整到的尺寸。
batch_size:【批大小】:一批数据的大小(默认 32)。
class_mode:【决定返回的标签数组的类型】:"categorical", "binary", "sparse", "input" 或 None 之一。默认:"categorical"。决定返回的标签数组的类型:
2、tf.keras.preprocessing.image.ImageDataGenerator 作用?
【Generate batches of tensor image data】:Generate batches of tensor image data with real-time data augmentation.
3、tf.keras.preprocessing.image.ImageDataGenerator.flow_from_directory 作用?
【data augumentation】:Takes the path to a directory & generates batches of augmented data.
4、ImageDataGenerator生成的train_generator输出格式?
data_batch, labels_batch这种形式
for data_batch, labels_batch in train_generator: print('data batch shape:', data_batch.shape)
5、fit模型拟合的时候,训练数据和验证数据都用生成器数据实例?
第一个参数就是train_generator
验证集数据就可以用validation_data=validation_generator
history = model.fit( train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50)
6、如何理解下面这段fit代码?
|||-begin
history = model.fit( train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50)
|||-end
【Python生成器】:它的第一个参数应该是一个 Python 生成器,可以不停地生 成输入和目标组成的批量,比如 train_generator。
【要知道每一轮需要从生成器中抽取多少个样本】:因为数据是不断生成的,所以 Keras 模型 要知道每一轮需要从生成器中抽取多少个样本。
【从生成器中抽取 steps_per_epoch 个批量后进入下一个轮次】:这是 steps_per_epoch 参数的作用:从生成器中抽取 steps_per_epoch 个批量后(即运行了 steps_per_epoch 次梯度下降),拟合过程 将进入下一个轮次。
【每个批量包含20 个样本】:本例中,每个批量包含20 个样本,所以读取完所有2000 个样本需要100 个批量。
二、5.2-3、猫狗分类(基本模型)
博客对应课程的视频位置:
2、构建网络
import os, shutil
# 原始数据集解压目录的路径
original_dataset_dir = 'E:\\78_recorded_lesson\\001_course_github\\AI_dataSet\\dogs-vs-cats\\kaggle_original_data\\train'
# 保存较小数据集的目录
base_dir = 'E:\\78_recorded_lesson\\001_course_github\\AI_dataSet\\dogs-vs-cats\\cats_and_dogs_small'
# 分别对应划分后的训练、验证和测试的目录
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
test_dir = os.path.join(base_dir, 'test')
# 猫的训练图像目录
train_cats_dir = os.path.join(train_dir, 'cats')
# 狗的训练图像目录
train_dogs_dir = os.path.join(train_dir, 'dogs')
# 猫的验证图像目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
# 狗的验证图像目录
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
# 猫的测试图像目录
test_cats_dir = os.path.join(test_dir, 'cats')
# 狗的测试图像目录
test_dogs_dir = os.path.join(test_dir, 'dogs')
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(150, 150, 3)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.summary()
3、配置模型用于训练
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
4、数据预处理
注意:ImageDataGenerator
# 将所有图像乘以 1/255 缩放
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir, # 目标目录
target_size=(150, 150), # 将所有图像的大小调整为 150×150
batch_size=20,
class_mode='binary') # 因为使用了binary_crossentropy 损失,所以需要用二进制标签
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
for data_batch, labels_batch in train_generator:
print('data batch shape:', data_batch.shape)
# print(data_batch)
print('labels batch shape:', labels_batch.shape)
# print(labels_batch)
break
5、利用批量生成器拟合模型
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=30,
validation_data=validation_generator,
validation_steps=50)
6、保存模型
model.save('cats_and_dogs_small_1.h5')
7、绘制训练过程中的损失曲线和精度曲线
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:《python深度学习》笔记—5.2-3、猫狗分类(基本模型) - Python技术站