国内建站平台排名怎么做网站后门
国内建站平台排名,怎么做网站后门,网络优化内容有哪些,网站一般多长时间[深度学习网络从入门到入土] 使用块的网络VGG
个人导航
知乎#xff1a;https://www.zhihu.com/people/byzh_rc
CSDN#xff1a;https://blog.csdn.net/qq_54636039
注#xff1a;本文仅对所述内容做了框架性引导#xff0c;具体细节可查询其余相关资料or源码
参考文章…[深度学习网络从入门到入土] 使用块的网络VGG个人导航知乎https://www.zhihu.com/people/byzh_rcCSDNhttps://blog.csdn.net/qq_54636039注本文仅对所述内容做了框架性引导具体细节可查询其余相关资料or源码参考文章各方资料文章目录[深度学习网络从入门到入土] 使用块的网络VGG个人导航参考资料背景架构(公式)1. VGG Block 的形式2. 为什么坚持用 3×33. 典型的 VGG16 配置创新点1. 提出“块”作为结构单位2. 小卷积核堆叠替代大卷积核3. 强迁移能力经典 backbone代码实现项目实例参考资料Very Deep Convolutional Networks for Large-Scale Image Recognition.背景AlexNet2012之后大家发现 CNN “更深”通常更强但当时“怎么加深”并不统一AlexNet 用较大的卷积核11×11、5×5GoogLeNet 用 Inception结构更复杂那时还没有 ResNet 的残差结构深网络训练更难VGG 提出的核心思想非常“工程化”用简单、统一、可重复堆叠的卷积块把网络堆深用大量 3×3 小卷积核替代大卷积核并用**Block块**的方式组织网络- 使结构更规整、易于扩展、易于迁移也因此成为经典 backbone架构(公式)1. VGG Block 的形式一个 VGG 块通常是( Conv 3 × 3 ReLU ) × n ⏟ 同一尺度下堆叠 → MaxPool 2 × 2 , s 2 \underbrace{(\text{Conv }3\times3 \text{ReLU}) \times n}_{\text{同一尺度下堆叠}} \; \rightarrow \; \text{MaxPool }2\times2, s2同一尺度下堆叠(Conv3×3ReLU)×n→MaxPool2×2,s2也就是同分辨率下做多次 3×3 卷积然后池化缩小一半。2. 为什么坚持用 3×3用多个 3×3 叠加可以替代大卷积核并且非线性更多一个 5×5 卷积的感受野可由两个 3×3 叠加得到3 × 3 3 × 3 ⇒ 5 × 5 感受野 3\times3 \;\; 3\times3 \Rightarrow 5\times5 \text{ 感受野}3×33×3⇒5×5感受野一个 7×7 卷积的感受野可由三个 3×3 叠加得到3 × 3 3 × 3 3 × 3 ⇒ 7 × 7 3\times3 \;\; 3\times3 \;\; 3\times3 \Rightarrow 7\times73×33×33×3⇒7×7好处参数更少非线性层ReLU更多 → 表达能力更强结构统一方便堆深3. 典型的 VGG16 配置论文里用 “配置表” 表示最常见是 VGG16 / VGG19VGG16[2,2,3,3,3]个卷积层分布在 5 个块里通道数64, 128, 256, 512, 512每个块后面一个2×2 maxpool最后是分类头FC 4096 - FC 4096 - FC num_classes创新点1.提出“块”作为结构单位VGG 的结构非常规整每个 Block 做特征提取 下采样重复堆叠即可这让“深度”变成了一种可控超参数11/13/16/192. 小卷积核堆叠替代大卷积核多个 3×3代替一个大核同等感受野下参数更少非线性更多表达力更强3. 强迁移能力经典 backbone虽然 VGG 参数量大、计算慢但其特征泛化强早期大量检测/分割方法都用它做 backbone代码实现importtorchimporttorch.nnasnnimporttorch.nn.functionalasFfrombyzh.ai.Butilsimportb_get_params# -----------------------------# VGG 各版本的“配置表”# 用数字表示输出通道数用 M 表示 MaxPool# -----------------------------cfgs{# VGG11: 8个conv 3个linear论文叫 11 层VGG11:[64,M,128,M,256,256,M,512,512,M,512,512,M],# VGG13: 10个convVGG13:[64,64,M,128,128,M,256,256,M,512,512,M,512,512,M],# VGG16: 13个conv最常用VGG16:[64,64,M,128,128,M,256,256,256,M,512,512,512,M,512,512,512,M],# VGG19: 16个convVGG19:[64,64,M,128,128,M,256,256,256,256,M,512,512,512,512,M,512,512,512,512,M],}defmake_vgg_features(cfg,use_bnFalse): 根据 cfg 列表构建 VGG 的卷积特征提取部分 features - cfg: cfgs[VGG16] 这种列表 - use_bn: 是否在每个卷积后加 BN原论文中 无BN layers[]in_channels3# 输入 RGB 三通道forvincfg:ifvM:# 最大池化把 H,W 各减半layers.append(nn.MaxPool2d(kernel_size2,stride2))else:# 3×3 卷积VGG 固定用 3×3padding1 - 保持尺寸不变convnn.Conv2d(in_channels,v,kernel_size3,padding1)ifuse_bn:layers.extend([conv,nn.BatchNorm2d(v),nn.ReLU()])else:layers.extend([conv,nn.ReLU()])in_channelsvreturnnn.Sequential(*layers)classB_VGG11_Paper(nn.Module): VGG11features classifier input shape: (N, 3, 224, 224) def__init__(self,num_classes1000,use_bnFalse):super().__init__()# 卷积特征提取部分self.featuresmake_vgg_features(cfgs[VGG11],use_bnuse_bn)# 自适应池化到 7×7self.avgpoolnn.AdaptiveAvgPool2d((7,7))# 分类头self.classifiernn.Sequential(nn.Linear(512*7*7,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,num_classes),)defforward(self,x):xself.features(x)# N, 512, 7, 7对 224 输入来说xself.avgpool(x)# 强制变成 N, 512, 7, 7更稳xtorch.flatten(x,1)# N, 512*7*7xself.classifier(x)# N, num_classesreturnxclassB_VGG13_Paper(nn.Module): VGG13features classifier input shape: (N, 3, 224, 224) def__init__(self,num_classes1000,use_bnFalse):super().__init__()# 卷积特征提取部分self.featuresmake_vgg_features(cfgs[VGG13],use_bnuse_bn)# 自适应池化到 7×7self.avgpoolnn.AdaptiveAvgPool2d((7,7))# 分类头self.classifiernn.Sequential(nn.Linear(512*7*7,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,num_classes),)defforward(self,x):xself.features(x)# N, 512, 7, 7对 224 输入来说xself.avgpool(x)# 强制变成 N, 512, 7, 7更稳xtorch.flatten(x,1)# N, 512*7*7xself.classifier(x)# N, num_classesreturnxclassB_VGG16_Paper(nn.Module): VGG16features classifier input shape: (N, 3, 224, 224) def__init__(self,num_classes1000,use_bnFalse):super().__init__()# 卷积特征提取部分self.featuresmake_vgg_features(cfgs[VGG16],use_bnuse_bn)# 自适应池化到 7×7self.avgpoolnn.AdaptiveAvgPool2d((7,7))# 分类头self.classifiernn.Sequential(nn.Linear(512*7*7,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,num_classes),)defforward(self,x):xself.features(x)# N, 512, 7, 7对 224 输入来说xself.avgpool(x)# 强制变成 N, 512, 7, 7更稳xtorch.flatten(x,1)# N, 512*7*7xself.classifier(x)# N, num_classesreturnxclassB_VGG19_Paper(nn.Module): VGG19features classifier input shape: (N, 3, 224, 224) def__init__(self,num_classes1000,use_bnFalse):super().__init__()# 卷积特征提取部分self.featuresmake_vgg_features(cfgs[VGG19],use_bnuse_bn)# 自适应池化到 7×7self.avgpoolnn.AdaptiveAvgPool2d((7,7))# 分类头self.classifiernn.Sequential(nn.Linear(512*7*7,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(p0.5),nn.Linear(4096,num_classes),)defforward(self,x):xself.features(x)# N, 512, 7, 7对 224 输入来说xself.avgpool(x)# 强制变成 N, 512, 7, 7更稳xtorch.flatten(x,1)# N, 512*7*7xself.classifier(x)# N, num_classesreturnxif__name____main__:# 测试 VGG11 输入输出modelB_VGG11_Paper(num_classes1000)xtorch.randn(2,3,224,224)ymodel(x)print(VGG16 输出形状:,y.shape)# torch.Size([2, 1000])print(f参数量:{b_get_params(model)})# 132_863_336# 测试 VGG13 输入输出modelB_VGG13_Paper(num_classes1000)xtorch.randn(2,3,224,224)ymodel(x)print(VGG16 输出形状:,y.shape)# torch.Size([2, 1000])print(f参数量:{b_get_params(model)})# 133_047_848# 测试 VGG16 输入输出modelB_VGG16_Paper(num_classes1000)xtorch.randn(2,3,224,224)ymodel(x)print(VGG16 输出形状:,y.shape)# torch.Size([2, 1000])print(f参数量:{b_get_params(model)})# 138_357_544# 测试 VGG19 输入输出modelB_VGG19_Paper(num_classes1000)xtorch.randn(2,3,224,224)ymodel(x)print(VGG16 输出形状:,y.shape)# torch.Size([2, 1000])print(f参数量:{b_get_params(model)})# 143_667_240项目实例库环境:numpy1.26.4 torch2.2.2cu121 byzh-core0.0.9.21 byzh-ai0.0.9.53 byzh-extra0.0.9.12 ...VGG训练MNIST数据集:# copy all the codes from here to runimporttorchimporttorch.nn.functionalasFfromuploadToPypi_ai.byzh.ai.Bdataimportb_stratified_indicesfrombyzh.ai.BtrainerimportB_Classification_Trainerfrombyzh.ai.BdataimportB_Download_MNIST,b_get_dataloader_from_tensor# from uploadToPypi_ai.byzh.ai.Bmodel.study_cnn import B_VGG16_Paperfrombyzh.ai.Bmodel.study_cnnimportB_VGG16_Paperfrombyzh.ai.Butilsimportb_get_device##### hyper params #####epochs10lr1e-3batch_size32deviceb_get_device(use_idle_gpuTrue)##### data #####downloaderB_Download_MNIST(save_dirD:/study_cnn/datasets/MNIST)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]num_samplesdata_dict[num_samples]indicesb_stratified_indices(y_train,num_samples//10)X_trainX_train[indices]X_trainF.interpolate(X_train,size(224,224),modebilinear)X_trainX_train.repeat(1,3,1,1)y_trainy_train[indices]indicesb_stratified_indices(y_test,num_samples//10)X_testX_test[indices]X_testF.interpolate(X_test,size(224,224),modebilinear)X_testX_test.repeat(1,3,1,1)y_testy_test[indices]train_dataloader,val_dataloaderb_get_dataloader_from_tensor(X_train,y_train,X_test,y_test,batch_sizebatch_size)##### model #####modelB_VGG16_Paper(num_classesnum_classes)##### else #####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/vgg16/log.txt)##### run #####trainer.train_eval_s(epochsepochs)##### calculate #####trainer.draw_loss_acc(./runs/vgg16/loss_acc.png,y_limFalse)trainer.save_best_checkpoint(./runs/vgg16/best_checkpoint.pth)trainer.calculate_model()