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())
### 关于一维卷积神经网络练习资料与教程 #### 1. 使用Keras实现的一维卷积神经网络实例 对于希望深入了解并实践一维卷积神经网络的应用场景而言,采用Python中的Keras库是一个不错的选择。下面提供了一个简单的例子来展示如何构建一个处理序列数据(如时间序列或文本)的一维CNN模型。 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense model = Sequential() # 添加一层带有64个过滤器、大小为3的一维卷积层 model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(None, 1))) # 添加最大池化层以减少维度 model.add(MaxPooling1D(pool_size=2)) # 展平操作以便连接全连接层 model.add(Flatten()) # 添加一个拥有100个节点的隐藏层 model.add(Dense(100, activation='relu')) # 输出层假设是二分类问题 model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) ``` 此代码片段展示了创建一个基本架构的过程,在该架构中应用了一维卷积核对输入的时间序列或其他形式的序列数据进行了特征提取[^1]。 #### 2. TensorFlow官方文档资源推荐 TensorFlow官方网站提供了丰富的指南和案例研究材料,其中包括专门针对不同类型的任务设计的各种类型的卷积神经网络的教学文章。特别是有关于自然语言处理(NLP)领域内使用一维卷积的例子,这对于理解如何利用预训练词嵌入作为初始权重非常有帮助。 #### 3. PyTorch框架下的一维卷积实战课程 除了上述提到的内容外,PyTorch社区也贡献了许多高质量的学习资源。GitHub上有许多开源项目可供参考学习,其中不乏专注于讲解如何在一维信号上实施卷积运算的具体细节以及最佳实践建议的文章和视频教程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值