这次的课后练习是使用从度娘的飞桨paddlepaddle的学习平台上的公开数据集。第一层目录包含train,test,valid个文件夹,每个文件夹内又存有十二种生肖的图像数据。
目录
一,数据集构成
二,数据导入
三,模型搭建
四,模型训练
五,模型测试
一,数据集构成
trian:每种动物600张,共计7200个样本。
valid:每种动物55张,共计660个样本。
test: 每种动物55张,共计660个样本。
二,数据导入
#手动定义数据集目录
train_dir='E:/深度学习数据集/signs/train'
validation_dir='E:/深度学习数据集/signs/valid'
test_dir='E:/深度学习数据集/signs/test'
train_datagen = ImageDataGenerator(rescale=1/255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(train_dir, (224, 224), batch_size=100, class_mode='binary', shuffle=True)
test_datagen = ImageDataGenerator(rescale=1/255)
test_generator = test_datagen.flow_from_directory(validation_dir, (224, 224), batch_size=100, class_mode='binary')
validation_datagen = ImageDataGenerator(rescale=1/255)
validation_generator = validation_datagen.flow_from_directory(validation_dir, (224, 224), batch_size=100, class_mode='binary')
model = tf.keras.models.Sequential([
# 第一层卷积,卷积核为,共16个,输入为150*150*1
tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same',input_shape=(224,224,3)),
tf.keras.layers.MaxPooling2D((2,2)),
# 第二层卷积,卷积核为3*3,共32个,
tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'),
tf.keras.layers.MaxPooling2D((2,2)),
# 第三层卷积,卷积核为3*3,共64个,
tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'),
tf.keras.layers.MaxPooling2D((2,2)),
# 第三层卷积,卷积核为3*3,共64个,
tf.keras.layers.Conv2D(64,(3,3),activation='relu'),
tf.keras.layers.MaxPooling2D((2,2)),
# 数据铺平
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64,activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(12,activation='softmax')
])
print(model.summary())
四,模型训练
model.compile(optimize=tf.keras.optimizers.SGD(0.1),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['acc'])
history1=model.fit_generator(train_generator,
validation_data=(validation_generator),
epochs=10)
model.save('shiershengxiao.h5')
print(history1)
本次模型训练数据量过多,在学习率为0.1的情况下没有很好的拟合,epochs=10后acc仅有0.3,所以我将学习率调整为0.00001后又继续训练了30轮。
因为我的显卡是AMD的,无法直接使用gpu跑代码,光靠cpu的算力跑十轮大概需要40分钟,所有后续我就没有再训练,不过看出模型是有进一步训练的空间,以后有机会再训练模型我会更新训练日志。
五,模型测试
model.evaluate(test_generator)