深度学习实践:卷积神经网络详解

需积分: 9 3 下载量 84 浏览量 更新于2024-07-17 收藏 48.92MB PDF 举报
"CNN_book_weixs.pdf" 卷积神经网络(Convolutional Neural Networks,简称CNN)是一种深度学习模型,特别适用于图像处理和计算机视觉任务。本书详细介绍了CNN的基础知识、基本部件以及经典结构,并涉及到网络的压缩方法。以下是其中的一些关键知识点: 1. **卷积神经网络基础知识**: - **发展历程**:CNN的历史可以追溯到20世纪80年代,LeCun等人提出的LeNet是最早的CNN之一。后来,随着计算能力的提升和大数据的可用性,AlexNet在2012年的ImageNet竞赛中取得突破,开启了深度学习的新纪元。 - **基本结构**:CNN由卷积层、池化层、激活函数、全连接层等组成。卷积层通过滤波器(或称卷积核)对输入图像进行扫描,提取特征;池化层则用于下采样,减少计算量,保持模型的鲁棒性。 - **前馈运算与反馈运算**:前馈运算指数据沿网络结构单向传播,从输入层到输出层;反馈运算涉及信息在网络内部的循环,有助于优化模型。 2. **卷积神经网络基本部件**: - **“端到端”思想**:CNN能实现从原始输入数据到最终预测结果的直接映射,无需手动特征工程。 - **网络符号定义**:每个层都有特定的表示,如卷积层(Conv)、池化层(Pool)、激活层(Activation)等,这些符号用于构建网络架构。 - **卷积层**:卷积层是CNN的核心,通过卷积操作学习图像的局部特征。 - **卷积**:卷积操作将滤波器应用于输入,生成特征图,捕获空间上的局部关系。 - **卷积操作的作用**:它可以捕获输入数据的局部不变性,减少参数数量,提高模型的泛化能力。 - **汇合层**:也称为池化层,它通过下采样降低数据的空间维度,同时保留重要的特征。 - **全连接层**:位于网络的最后部分,将卷积层或池化层输出的特征向量转换为分类或回归结果。 - **激活函数**:如ReLU、Sigmoid和 Tanh,引入非线性,使网络能够学习更复杂的模式。 - **目标函数**:如交叉熵损失函数,用于衡量模型预测结果与真实标签之间的差异,指导网络训练。 3. **卷积神经网络经典结构**: - AlexNet、VGG、GoogLeNet、ResNet等是CNN的经典结构,它们在设计上各有特色,如AlexNet引入了大量卷积层,VGG强调深网络,GoogLeNet提出了Inception模块,ResNet解决了深度网络中的梯度消失问题。 4. **CNN的压缩**: - 压缩方法包括权重共享、权值量化、低秩分解等,目的是减小模型大小,提高部署效率。 这些知识点构成了CNN的理论基础和实际应用框架,对于理解深度学习在图像识别、目标检测、图像分类等领域的应用至关重要。通过学习这些内容,读者可以掌握构建和训练CNN模型的基本技能。

def model(self): num_classes = self.config.get("CNN_training_rule", "num_classes") seq_length = self.config.get("CNN_training_rule", "seq_length") conv1_num_filters = self.config.get("CNN_training_rule", "conv1_num_filters") conv1_kernel_size = self.config.get("CNN_training_rule", "conv1_kernel_size") conv2_num_filters = self.config.get("CNN_training_rule", "conv2_num_filters") conv2_kernel_size = self.config.get("CNN_training_rule", "conv2_kernel_size") hidden_dim = self.config.get("CNN_training_rule", "hidden_dim") dropout_keep_prob = self.config.get("CNN_training_rule", "dropout_keep_prob") model_input = keras.layers.Input((seq_length,1), dtype='float64') # conv1形状[batch_size, seq_length, conv1_num_filters] conv_1 = keras.layers.Conv1D(conv1_num_filters, conv1_kernel_size, padding="SAME")(model_input) conv_2 = keras.layers.Conv1D(conv2_num_filters, conv2_kernel_size, padding="SAME")(conv_1) max_poolinged = keras.layers.GlobalMaxPool1D()(conv_2) full_connect = keras.layers.Dense(hidden_dim)(max_poolinged) droped = keras.layers.Dropout(dropout_keep_prob)(full_connect) relued = keras.layers.ReLU()(droped) model_output = keras.layers.Dense(num_classes, activation="softmax")(relued) model = keras.models.Model(inputs=model_input, outputs=model_output) # model.compile(loss="categorical_crossentropy", # optimizer="adam", # metrics=["accuracy"]) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) return model给这段代码每行加上注释

187 浏览量