tensorflow--十二生肖识别

这次的课后练习是使用从度娘的飞桨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())

tensorflow--十二生肖识别_第1张图片

四,模型训练

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轮。

tensorflow--十二生肖识别_第2张图片
因为我的显卡是AMD的,无法直接使用gpu跑代码,光靠cpu的算力跑十轮大概需要40分钟,所有后续我就没有再训练,不过看出模型是有进一步训练的空间,以后有机会再训练模型我会更新训练日志。

五,模型测试

model.evaluate(test_generator)

在这里插入图片描述

你可能感兴趣的:(深度学习tensorflow,深度学习,tensorflow,神经网络,卷积神经网络,python)