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

需积分: 9 3 下载量 164 浏览量 更新于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模型的基本技能。

class STHSL(nn.Module): def __init__(self): super(STHSL, self).__init__() self.dimConv_in = nn.Conv3d(1, args.latdim, kernel_size=1, padding=0, bias=True) self.dimConv_local = nn.Conv2d(args.latdim, 1, kernel_size=1, padding=0, bias=True) self.dimConv_global = nn.Conv2d(args.latdim, 1, kernel_size=1, padding=0, bias=True) self.spa_cnn_local1 = spa_cnn_local(args.latdim, args.latdim) self.spa_cnn_local2 = spa_cnn_local(args.latdim, args.latdim) self.tem_cnn_local1 = tem_cnn_local(args.latdim, args.latdim) self.tem_cnn_local2 = tem_cnn_local(args.latdim, args.latdim) self.Hypergraph_Infomax = Hypergraph_Infomax() self.tem_cnn_global1 = tem_cnn_global(args.latdim, args.latdim, 9) self.tem_cnn_global2 = tem_cnn_global(args.latdim, args.latdim, 9) self.tem_cnn_global3 = tem_cnn_global(args.latdim, args.latdim, 9) self.tem_cnn_global4 = tem_cnn_global(args.latdim, args.latdim, 6) self.local_tra = Transform_3d() self.global_tra = Transform_3d() def forward(self, embeds_true, neg): embeds_in_global = self.dimConv_in(embeds_true.unsqueeze(1)) DGI_neg = self.dimConv_in(neg.unsqueeze(1)) embeds_in_local = embeds_in_global.permute(0, 3, 1, 2, 4).contiguous().view(-1, args.latdim, args.row, args.col, 4) spa_local1 = self.spa_cnn_local1(embeds_in_local) spa_local2 = self.spa_cnn_local2(spa_local1) spa_local2 = spa_local2.view(-1, args.temporalRange, args.latdim, args.areaNum, args.cateNum).permute(0, 2, 3, 1, 4) tem_local1 = self.tem_cnn_local1(spa_local2) tem_local2 = self.tem_cnn_local2(tem_local1) eb_local = tem_local2.mean(3) eb_tra_local = self.local_tra(tem_local2) out_local = self.dimConv_local(eb_local).squeeze(1) hy_embeds, Infomax_pred = self.Hypergraph_Infomax(embeds_in_global, DGI_neg) tem_global1 = self.tem_cnn_global1(hy_embeds) tem_global2 = self.tem_cnn_global2(tem_global1) tem_global3 = self.tem_cnn_global3(tem_global2) tem_global4 = self.tem_cnn_global4(tem_global3) eb_global = tem_global4.squeeze(3) eb_tra_global = self.global_tra(tem_global4) out_global = self.dimConv_global(eb_global).squeeze(1) return out_local, eb_tra_local, eb_tra_global, Infomax_pred, out_global

2023-05-24 上传