关于数据增强
关于数据增强:有三个部分。
第一部分:定义数据增强的方式
image_gen_train = ImageDataGenerator(
rescale=1,#归至0~1
rotation_range=0,#随机0度旋转
width_shift_range=0,#宽度偏移
height_shift_range=0,#高度偏移
horizontal_flip=True,#水平翻转
zoom_range=1#将图像随机缩放到100%
)
第二部分:数据的预处理。对数据进行中心化或者缩放,ImageDataGenerator需要统计数
据,如特征平均,标准偏差等
image_gen_train.fit(x_train)
fit(x, augment=False, rounds=1, seed=None)
x: 样本数据。
augment: 布尔值(默认为 False)。是否使用随机样本扩张。
rounds: 整数(默认为 1)。如果数据数据增强(augment=True),表明在数据上进行多少次增强。
seed: 整数(默认 None)。随机种子
第三部分:开始数据增强。通常作为model.fit的参数来代替x,y输入
如:
model.fit(image_gen_train.flow(x_train, y_train, batch_size=64), epochs=5,
#model.fit(x_train, y_train, batch_size=64, epochs=5,
validation_data=(x_test, y_test),
validation_freq=1, callbacks=[cp_callback], verbose=1)
flow(self, X, y, batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix=’’, save_format=‘png’):接收numpy数组和标签为参数,生成经过数据提升或标准化后的batch数据
x:样本数据
y:标签
batch_size:整数,默认32
shuffle:布尔值,是否随机打乱数据,默认为True
save_to_dir:None或字符串,该参数能让你将提升后的图片保存起来,用以可视化
save_prefix:字符串,保存提升后图片时使用的前缀, 仅当设置了save_to_dir时生效
save_format:“png"或"jpeg"之一,指定保存图片的数据格式,默认"jpeg”
yields:形如(x,y)的tuple,x是代表图像数据的numpy数组.y是代表标签的numpy数组.该迭代器无限循环.
seed: 整数,随机数种子
经典的卷积神经网络模型
LeNet
最早的模型,特点为:
(5,5)的卷积核,比较大
激活函数都是sigmoid(可能是我认识有偏差?)
来尝试一下检测fashion_mnist数据集合
因为数据集的图片是(28,28)但是模型原来是(32,32)的不知道咋个统一,所以就只能稍微修改一下模型,运行
果然正确率惨不忍睹
# 利用class结构训练并测试fashion_mnist
import tensorflow as tf
import os
from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, AveragePooling2D, Dropout, Flatten, Dense
from tensorflow.keras import Model
from matplotlib import pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1