做网站的收获及感想,设计网名的软件,wordpress字体更改,建设厅网站注册后多长时间开通[深度学习网络从入门到入土] 深度卷积神经网络alexnet 个人导航 知乎#xff1a;https://www.zhihu.com/people/byzh_rc CSDN#xff1a;https://blog.csdn.net/qq_54636039 注#xff1a;本文仅对所述内容做了框架性引导#xff0c;具体细节可查询其余相关资料or源码 …[深度学习网络从入门到入土] 深度卷积神经网络alexnet个人导航知乎https://www.zhihu.com/people/byzh_rcCSDNhttps://blog.csdn.net/qq_54636039注本文仅对所述内容做了框架性引导具体细节可查询其余相关资料or源码参考文章各方资料文章目录[深度学习网络从入门到入土] 深度卷积神经网络alexnet个人导航参考资料背景架构(公式)1.输入2.卷积层3.激活函数ReLU4.局部响应归一化LRN5.池化层6.全连接层创新点1. ReLU 取代传统激活函数2. GPU 并行训练3. 大模型 大数据4. 数据增强5. Dropout拓展 - 局部响应归一化LRN代码实现项目实例参考资料ImageNet Classification with Deep Convolutional Neural Networks背景AlexNet 的核心意义不在于“用了 CNN”而在于它首次证明: 在大数据 GPU 条件下深层 CNN 可以显著击败传统方法-第一个把深度学习真正跑通并跑赢传统方法的系统工程AlexNet 作用于 ImageNet 2012Top-5 error 从 ~26% 直接降到 ~15%断层式领先直接改变研究范式架构(公式)AlexNet 是一个8 层可学习参数网络5 个卷积层3 个全连接层整体结构可概括为Input → Conv → ReLU → LRN → Pool → ⋯ → FC → Softmax \text{Input} \rightarrow \text{Conv} \rightarrow \text{ReLU} \rightarrow \text{LRN} \rightarrow \text{Pool} \rightarrow \cdots \rightarrow \text{FC} \rightarrow \text{Softmax}Input→Conv→ReLU→LRN→Pool→⋯→FC→Softmax1.输入原论文输入尺寸3 × 227 × 227 3 \times 227 \times 2273×227×2272.卷积层标准二维卷积y i , j , k ∑ c ∑ u , v w u , v , c , k ⋅ x i u , j v , c b k y_{i,j,k} \sum_{c}\sum_{u,v} w_{u,v,c,k} \cdot x_{iu,jv,c} b_kyi,j,k​c∑​u,v∑​wu,v,c,k​⋅xiu,jv,c​bk​AlexNet 的关键不是公式而是规模Conv111 × 11 11 \times 1111×11stride4Conv25 × 5 5 \times 55×5Conv3–53 × 3 3 \times 33×33.激活函数ReLU首次大规模使用 ReLUf ( x ) max ⁡ ( 0 , x ) f(x) \max(0, x)f(x)max(0,x)对比 tanh / sigmoid避免梯度饱和显著加快收敛速度4.局部响应归一化LRNAlexNet 特有后续模型基本弃用b x , y i a x , y i ( k α ∑ j i − n / 2 i n / 2 ( a x , y j ) 2 ) β b_{x,y}^i \frac{a_{x,y}^i} {\left(k \alpha \sum_{ji-n/2}^{in/2}(a_{x,y}^j)^2\right)^\beta}bx,yi​(kα∑ji−n/2in/2​(ax,yj​)2)βax,yi​​本质引入跨通道竞争模拟生物神经元侧抑制5.池化层重叠最大池化overlapping max poolingy max ⁡ ( u , v ) ∈ Ω x u , v y \max_{(u,v)\in \Omega} x_{u,v}y(u,v)∈Ωmax​xu,v​stride kernel size \text{stride} \text{kernel size}stridekernel size: 减少过拟合同时保留更多空间信息6.全连接层最后三层y W x b \mathbf{y} \mathbf{W}\mathbf{x} \mathbf{b}yWxb最后一层使用 Softmaxp i e z i ∑ j e z j p_i \frac{e^{z_i}}{\sum_j e^{z_j}}pi​∑j​ezj​ezi​​创新点1. ReLU 取代传统激活函数训练速度数量级提升为更深网络铺路2. GPU 并行训练使用两张 GPU网络结构被“强行拆分”到不同 GPU 上3. 大模型 大数据参数量 ~ 60MImageNet 规模首次被充分利用4. 数据增强随机裁剪水平翻转RGB 颜色扰动PCA jittering5. Dropout首次在大规模 CNN 中系统使用主要用于全连接层h ~ i r i h i , r i ∼ Bernoulli ( p ) \tilde{h}_i r_i h_i,\quad r_i \sim \text{Bernoulli}(p)h~i​ri​hi​,ri​∼Bernoulli(p)拓展 - 局部响应归一化LRN在通道维度channel上做“邻域竞争/抑制”- 某个位置上如果某些通道响应很大会抑制同一位置附近通道的响应从而“强调强响应、压制弱响应”LRN 在 AlexNet 之后逐渐不用了主要原因是效果一般、计算开销不小BatchNorm/LayerNorm/GroupNorm 更稳定、训练更快、更有效nn.LocalResponseNorm(size5, alpha1e-4, beta0.75, k2.0):size5: 通道邻域窗口大小 (跨通道的局部范围)5表示每个通道会参考它自己以及左右各 2 个通道的能量平方和alpha1e-4: 归一化强度系数 (越大分母里那项越大抑制越强)beta0.75: 指数幂 (越大抑制的非线性越强)k2.0: 分母的基底常数项 (防止分母太小导致数值爆炸也控制整体缩放)代码实现importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassB_AlexNet_Paper(nn.Module):def__init__(self,num_classes1000):super().__init__()# # 特征提取部分# self.conv1nn.Conv2d(3,96,kernel_size11,stride4)self.relu1nn.ReLU(inplaceTrue)self.lrn1nn.LocalResponseNorm(size5,alpha1e-4,beta0.75,k2.0)self.pool1nn.MaxPool2d(kernel_size3,stride2)self.conv2nn.Conv2d(96,256,kernel_size5,padding2)self.relu2nn.ReLU(inplaceTrue)self.lrn2nn.LocalResponseNorm(size5,alpha1e-4,beta0.75,k2.0)self.pool2nn.MaxPool2d(kernel_size3,stride2)self.conv3nn.Conv2d(256,384,kernel_size3,padding1)self.relu3nn.ReLU(inplaceTrue)self.conv4nn.Conv2d(384,384,kernel_size3,padding1)self.relu4nn.ReLU(inplaceTrue)self.conv5nn.Conv2d(384,256,kernel_size3,padding1)self.relu5nn.ReLU(inplaceTrue)self.pool3nn.MaxPool2d(kernel_size3,stride2)# # 分类器部分保持不变# 256*6*6 对齐 227×227 输入# self.classifiernn.Sequential(nn.Dropout(p0.5),# 仅在model.train()训练时才启用nn.Linear(256*6*6,4096),nn.ReLU(inplaceTrue),nn.Dropout(p0.5),# 仅在model.train()训练时才启用nn.Linear(4096,4096),nn.ReLU(inplaceTrue),nn.Linear(4096,num_classes),)defforward(self,x):# # 1) 输入尺寸对齐224 - 227# ifx.shape[-2:](224,224):xF.pad(x,(1,2,1,2),modeconstant,value0.0)# # 2) Conv1 - ReLU - LRN - Pool# xself.conv1(x)#xself.relu1(x)xself.lrn1(x)xself.pool1(x)# # 3) Conv2 - ReLU - LRN - Pool# xself.conv2(x)xself.relu2(x)xself.lrn2(x)xself.pool2(x)# # 4) Conv3 - ReLU# xself.conv3(x)xself.relu3(x)# # 5) Conv4 - ReLU# xself.conv4(x)xself.relu4(x)# # 6) Conv5 - ReLU - Pool# xself.conv5(x)xself.relu5(x)xself.pool3(x)# # 7) Flatten classifier# xx.flatten(1)xself.classifier(x)returnxif__name____main__:netB_AlexNet_Paper(num_classes1000)atorch.randn(50,3,224,224)resultnet(a)print(result.shape)项目实例库环境:numpy1.26.4 torch2.2.2cu121 byzh-core0.0.9.21 byzh-ai0.0.9.50 byzh-extra0.0.9.12 ...AlexNet训练Oxford_IIIT_Pet数据集:importtorchfrombyzh.ai.BtrainerimportB_Classification_Trainerfrombyzh.ai.BdataimportB_Download_Oxford_IIIT_Pet,b_get_dataloader_from_tensorfrombyzh.ai.Bmodel.study_cnnimportB_AlexNet_Paperfrombyzh.ai.Butilsimportb_get_device##### data #####downloaderB_Download_Oxford_IIIT_Pet(save_dirD:/study_cnn/datasets/Oxford_IIIT_Pet)data_dictdownloader.get_data()X_traindata_dict[X_train_standard]y_traindata_dict[y_train]X_testdata_dict[X_test_standard]y_testdata_dict[y_test]num_classesdata_dict[num_classes]train_dataloader,val_dataloaderb_get_dataloader_from_tensor(X_train,y_train,X_test,y_test)##### model #####modelB_AlexNet_Paper(num_classesnum_classes)##### else #####epochs10lr1e-3deviceb_get_device(use_idle_gpuTrue)optimizertorch.optim.Adam(model.parameters(),lrlr)criteriontorch.nn.CrossEntropyLoss()##### trainer #####trainerB_Classification_Trainer(modelmodel,optimizeroptimizer,criterioncriterion,train_loadertrain_dataloader,val_loaderval_dataloader,devicedevice)trainer.set_writer1(./runs/log.txt)##### run #####trainer.train_eval_s(epochsepochs)##### calculatetrainer.draw_loss_acc(./runs/loss_acc.png,y_limFalse)trainer.save_best_checkpoint(./runs/alexnet_best.pth)trainer.calculate_model()