VGGNet的结构和复现

1 结构以及模型退化问题

上述为VGGNet的结构图,左边是VGG16D的步骤 16代表16层,有参数的层,其他结构也是如此

对于这6个机构来说,D中的VGG16是最优的,而VGG19相比较而言,没有VGG16优,VGG16有16层(包括13个卷积层和3个全连接层),而VGG19有19层(包括16个卷积层和3个全连接层),对于出现了的模型退化问题,有几个原因:

1 网络层次越深,提取的特征越是高度抽象,这可以帮助模型理解复杂的、高级的模式。然而,如果网络过深,最后几层可能会从数据中提取过于抽象的特征,与具体的输入图像的关联性减弱,导致模型性能降低

2 在非常深的网络中,梯度在反向传播过程中可能会因为多层传递而变得非常小(梯度消失)或非常大(梯度爆炸),这会使得网络难以训练

3 更深的网络通常有更多的参数,这可能会使模型更容易发生过拟合,特别是当训练数据有限时

等等一些原因

2 代码复现(6种结构的复现)

只是简单的复现

import torch.nn as nn
import torchclass VggBlock(nn.Module):def __init__(self, in_channel, out_channel, n, use_11 = False, LRN = False) -> None:super().__init__()layers = []for i in range(n):if use_11 and (i == n-1):kernel_size = (1, 1)padding = 0    else:kernel_size = (3, 3)padding = 1conv = nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_size=kernel_size, stride=1, padding=padding),nn.ReLU())layers.append(conv)in_channel = out_channelif LRN == True:layers.append(nn.LocalResponseNorm(size=5))layers.append(nn.MaxPool2d(2))self.block = nn.Sequential(*layers)def forward(self, x):return self.block(x)class VGGNet(nn.Module):def __init__(self, num_classes, features, classify_input_channel) -> None:super().__init__()self.num_classes = num_classesself.features = featuresself.pooling = nn.AdaptiveMaxPool2d(7)self.classify = nn.Sequential(nn.Linear(in_features=7 * 7 * classify_input_channel, out_features=4096),nn.ReLU(),nn.Linear(in_features=4096, out_features=4096),nn.ReLU(),nn.Linear(in_features=4096, out_features=self.num_classes),)def forward(self, images):z = self.features(images)z = self.pooling(z)z = z.flatten(1)return self.classify(z) class VGGNet11A(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 1),VggBlock(64, 128, 1),VggBlock(128, 256, 2),VggBlock(256, 512, 2),VggBlock(512, 512, 2))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)class VGGNet11ALRN(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 1, LRN=True),VggBlock(64, 128, 1),VggBlock(128, 256, 2),VggBlock(256, 512, 2),VggBlock(512, 512, 2))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)class VGGNet13B(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 2),VggBlock(64, 128, 2),VggBlock(128, 256, 2),VggBlock(256, 512, 2),VggBlock(512, 512, 2))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)class VGGNet16C(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 2),VggBlock(64, 128, 2),VggBlock(128, 256, 3, use_11=True),VggBlock(256, 512, 3, use_11=True),VggBlock(512, 512, 3, use_11=True))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)class VGGNet16C(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 2),VggBlock(64, 128, 2),VggBlock(128, 256, 3),VggBlock(256, 512, 3),VggBlock(512, 512, 3))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)class VGGNet16C(nn.Module):def __init__(self, num_classes) -> None:super().__init__()features = nn.Sequential(VggBlock(3, 64, 2),VggBlock(64, 128, 2),VggBlock(128, 256, 4),VggBlock(256, 512, 4),VggBlock(512, 512, 4))self.vggnet = VGGNet(num_classes, features, classify_input_channel=512)def forward(self, images):return self.vggnet(images)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于获取CISP-PTE一些避坑经历

有幸在今年8月份成功通过CISP-PTE认证,以下是我遇到的一些常见问题,以及一些考点内容以及总结 考试题型 20道选择题 (20分) 5道基础题 (50分) 一题一个Key 1道综合大题 (30分) 三个key 线下考试 这次考试是在中国上海,现场大概…

节点的度(Degree of a node)、“入度”(In-degree)、“出度”(Out-degree)

在图论和网络分析中,“节点的度”(Degree of a node)是指与该节点直接相连的边的数量。在一个无向图中,每条边连接两个节点,对于每个节点来说,它的度就是与它相连的边的总数。在一个有向图中,节…

强化学习 - Twin Delayed DDPG (TD3)

什么是机器学习 Twin Delayed DDPG (TD3) 是一种用于解决连续动作空间的强化学习问题的算法,是 Deep Deterministic Policy Gradient (DDPG) 的改进版本。TD3引入了一些技巧,例如双Q网络(Twin Q-networks)和延迟更新,…

uniapp scroll-view用法[下拉刷新,触底事件等等...](4)

前言:可滚动视图区域。用于区域滚动 话不多说 直接上官网属性 官网示例 讲一下常用的几个 scroll 滚动时触发 scrolltoupper 滚动到顶部或左边,会触发 scrolltoupper 事件 scrolltolower 滚动到底部或右边,会触发 scrolltolower 事件 1.纵向滚动…

【HTML教程】跟着菜鸟学语言—HTML5个人笔记经验(四)

HTML学习第三天&#xff01; PS&#xff1a;牛牛只是每天花了1.5-2小时左右来学习HTML。 书接上回 HTML<div>和<span> HTML 可以通过<div> 和 <span>将元素组合起来。 HTML 区块元素 大多数 HTML 元素被定义为块级元素或内联元素。 块级元素在浏…

【Git配置代理】Failed to connect to github.com port 443 问题解决方法

前言&#xff1a; 在学习代码审计时&#xff0c;有时会需要使用git去拉取代码&#xff0c;然后就出现了如下错误 看过网上很多解决方法&#xff0c;觉得问题的关键还是因为命令行在拉取/推送代码时并没有使用VPN进行代理。 解决办法 &#xff1a; 配置http代理&#xff1a;…

MySQL-round()四舍五入取整函数

定义和用法 ROUND() 函数将数字四舍五入到指定的小数位数。 语法 ROUND(number, decimals) 参数值 参数描述number必需。要四舍五入的数字decimals可选。number 要四舍五入的小数位数。 如果省略&#xff0c;则返回整数&#xff08;无小数&#xff09; 1、ROUND(X)函数 …

huanju一台dell机器Ubuntu wifi 故障留档

非常神奇的一台机器&#xff0c;先说结果&#xff0c;放弃该机器了&#xff0c;让另一台机器顶上去。 故障表现&#xff1a; 1 在经过一路颠簸后&#xff0c;wifi一开&#xff0c;不管连没连上&#xff0c;屏幕都疯狂输出报错信息 [11376.275959] pcieport 0000:00:1c.7: AER…

【Linux】第三十七站:信号保存

文章目录 一、信号发送二、信号保存1.为什么要进行信号保存&#xff1f; 三、阻塞信号1.信号的一些相关概念2.在内核中的表示3.sigset_t4.信号集操作函数5.sigprocmask6.sigpending7. 总结 一、信号发送 如下所示&#xff0c;对于普通信号&#xff0c;它的编号是从1~31。这个是…

指针的深入了解2

1.const修饰指针 在这之前我们还学过static修饰变量&#xff0c;那我们用const来修饰一下变量会有什么样的效果呢&#xff1f; 我们来看看&#xff1a; 我们可以看到编译器报错告诉我们a变成了一个不可修改的值&#xff0c;我们在变量前加上了const进行限制&#xff0c;但是我…

使用py-spy对python程序进行性能诊断学习

py-spy简介 py-spy是一个用Rust编写的轻量级Python分析工具&#xff0c;它能够监视正在运行的Python程序&#xff0c;而不需要修改代码或者重新启动程序。Py-spy可以在不影响程序运行的情况下&#xff0c;采集程序运行时的信息&#xff0c;生成火焰图&#xff08;flame graph&…

php数组算法(1)判断一维数组和多元数组中的元素是否相等并输出键值key

在php中&#xff0c;如何判断[1,0,1]和[ [0, 0, 0],//体质正常 [1, 0, 0],//气虚体质 [0, 1, 0],//血瘀体质 [0, 0, 1],//阴虚体质 [1, 1, 0],//气虚兼血瘀体质 [1, 0, 1],//气虚兼阴虚体质 [0, 1, 1],//血瘀兼阴虚体质 [1, 1, 1],//气虚兼血瘀兼阴虚体质 ];中的第n项相等&…

SpringBoot集成MyBatis操作MySql8的JSON类型

SpringBoot集成MyBatis操作MySql8的JSON类型 1.定义Json类型转换器&#xff1a;JsonTypeHandler 一个包有一个类型转换器就够了开箱即用&#xff0c;复制即可 package com.ins.iot.sync.server.handle;import com.fasterxml.jackson.annotation.JsonInclude; import com.fas…

linux 基于科大讯飞的文字转语音使用

官方文档地址&#xff1a;离线语音合成 Linux SDK 文档 | 讯飞开放平台文档中心 一、SDK下载 1、点击上面官方文档地址的链接&#xff0c;可以跳转到以下界面。 2、点击“普通版”&#xff0c;跳转到以下界面。 3、点击“下载”跳转到以下界面 4、最后&#xff0c;点击“SDK下…

Qt6入门教程 12:QAbstractButton

目录 一.状态 二.信号 三.使用 1.自定义按钮 2.多选 3.互斥 QAbstractButton类实现了一个抽象按钮&#xff0c;并且让它的子类来指定如何处理用户的动作&#xff0c;并指定如何绘制按钮。QAbstractButton类是所有按钮控件的基类。 QAbstractButton提供…

【阿里云服务器数据迁移】 同一个账号 不同区域服务器

前言 假如说一台云服务器要过期了,现在新买了一台,有的人会烦恼又要将重新在新的服务器上装环境,部署上线旧服务器上的网站项目, 但是不必烦恼,本文将介绍如何快速将就旧的服务器上的数据迁移到新的服务器上. 包括所有的环境和网站项目噢 ! 步骤 (1) 创建旧服务器自定义镜像…

Linux命令 - 统计log日志某接口用户访问频次并排序

​ 背景 某天发现内部人员使用的app服务器访问突增&#xff0c;但不影响服务正常运行&#xff0c;想通过log统计接口的人员访问频次。 从监控平台可以看到访问激增的接口&#xff0c;因Nginx不缓存用户信息只有访问IP&#xff0c;日志清洗的Hive表只能访问前一天&#xff0c;…

行测-资料:2. 一般增长率、增长量

1、一般增长率 1.1 百分数和百分点 50%&#xff0c;20% 1.2 增长率和倍数 1.5&#xff1b;50 1.3 成数和翻番 1.4 增幅&#xff0c;降幅&#xff0c;变化幅度 A&#xff0c;A&#xff0c;D B&#xff0c;高于全国增速 2.3 个百分点&#xff0c;21.8 - 2.3 19.5。 5%&#xff0…

Oracle PL/SQL Programming 第1章:Introduction to PL/SQL 读书笔记

总的目录和进度&#xff0c;请参见开始读 Oracle PL/SQL Programming 第6版 PL/SQL 是 “Procedural Language extensions to the Structured Query Language.”的缩写。 什么是PL/SQL? Oracle 公司推出 PL/SQL 是为了克服 SQL 中的一些限制&#xff0c;并为那些寻求构建针…

RTPS协议

文章目录 RTPS(Real-time Publish-Subscribe Protocol)RTPS(Real-time Publish-Subscribe Protocol) RTPS(Real-time Publish-Subscribe Protocol)是一种基于发布/订阅模型的协议,用于实时数据分发。它是 OMG 组织定义的标准协议,用于支持分布式实时系统中的数据分发和…