keras框架下的卷积神经网络分类练习

目标
····掌握keras卷积网络相关API
····掌握卷积网络的构建

卷积网络简介:

卷积神经网络由一个或多个卷积层池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经网络,卷积神经网络需要考量的参数更少
而经典卷积网络AlexNet模型与LexNet模型更为优秀,以后在做介绍。
在这里插入图片描述

实践:
使用keras内置数据集CIFAR100类别分类
这个数据集有100种内别,做分类测试很好用
在这里插入图片描述
在这里插入图片描述

用于构建CNN模型的API

		Conv2D:卷积层
		MaxPool2D:池化层 
		Flatten:压平数据为一维
		Dense: 全连接层
  1. 读取Keras内置数据集并处理
    读取数据集:
    从datasets中获取相应的数据集,直接有训练集和测试集
    需要进行形状处理以及归一化
class CNNMnist(object):
    def __init__(self):

        (self.train, self.train_label), (self.test, self.test_label) = \
            keras.datasets.cifar100.load_data()

        self.train = self.train.reshape(-1, 32, 32, 3) / 255.0
        self.test = self.test.reshape(-1, 32, 32, 3) / 255.0
  1. 模型编写,设计卷积网络

两层卷积层+两个神经网络层
网络设计:
第一层
卷积:32个filter、大小55、strides=1、padding=“SAME”
激活:Relu
池化:大小2x2、strides2
第二层
卷积:64个filter、大小5
5、strides=1、padding=“SAME”
激活:Relu
池化:大小2x2、strides2
全连接层

注意:经过每一层图片数据大小的变化需要确定,CIFAR100输入的每批次若干图片数据大小为[None, 32 * 32],如果要进过卷积计算,需要变成[None, 32, 32, 3]

具体如下:
在这里插入图片描述
3. 建立卷积模型

model = keras.Sequential([
        keras.layers.Conv2D(32, kernel_size=5, strides=1,
                            padding='same', data_format='channels_last', activation=tf.nn.relu),
        keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
        keras.layers.Conv2D(64, kernel_size=5, strides=1,
                            padding='same', data_format='channels_last', activation=tf.nn.relu),
        keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
        keras.layers.Flatten(),
        keras.layers.Dense(1024, activation=tf.nn.relu),
        keras.layers.Dense(100, activation=tf.nn.softmax),
    ])
  1. 编译并且训练
    编译:优化器optimizers用adam,损失函数使用sparse_categorical_crossentropy, 精确率使用acc内置函数

训练:每批次batchsize为标准32,训练回合epochs设置3000次,超参数实际根据你的数据集来

 def compile(self):

        CNNMnist.model.compile(optimizer=keras.optimizers.Adam(),
                               loss=tf.keras.losses.sparse_categorical_crossentropy,
                               metrics=['accuracy'])
        return None

    def fit(self):

        CNNMnist.model.fit(self.train, self.train_label, epochs=3000, batch_size=32)

        return None

    def evaluate(self):

        test_loss, test_acc = CNNMnist.model.evaluate(self.test, self.test_label)

        print(test_loss, test_acc)
        return None


if __name__ == '__main__':

    cnn = CNNMnist()

    cnn.compile()

    cnn.fit()

    cnn.predict()

    print(CNNMnist.model.summary())
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值