**VGG Net的主要特点是将卷积层的深度增加到了极致,使用了多个 3x3 的卷积核进行卷积操作,增加了网络的深度,从而提高了网络的准确性。**VGG Net 的网络结构非常简单,只包含卷积层、池化层和全连接层,没有任何其他的复杂结构,因此在理解上也很简单。
VGG Net总共有两个版本,分别是VGG16和VGG19,它们的网络结构非常相似,只是深度不同。其中,VGG16包含13个卷积层和3个全连接层,VGG19则包含16个卷积层和3个全连接层。这些卷积层和全连接层都使用了ReLU激活函数和Dropout正则化技术,以避免过拟合。
VGG Net的优点是它的网络结构非常清晰,易于理解和实现,同时具有较高的准确性。但是,由于网络很深,因此训练时间较长,同时也存在过拟合的问题。另外,VGG Net 的参数量非常大,因此需要较大的存储空间和计算资源。
VGG Net存在模型退化的问题,这主要是由于网络的深度过大所导致的。(本质上就是学习的太多了,每加一层线性转换,你的特征就会发生一次变换,导致变化过多了所以和原始特征之间的相关性会很弱甚至基本消失了)
在深度卷积神经网络中,增加网络的深度可以有效地提高模型的准确性。然而,当网络的深度达到一定程度时,模型的准确性反而开始下降,出现了所谓的模型退化(Degradation Problem)现象。模型退化指的是,随着网络深度的增加,训练误差会逐渐降低,但测试误差却会先降低后增加。
VGG Net作为一个非常深的卷积神经网络,也存在模型退化的问题。实验结果表明,在VGG Net的网络结构中,当网络深度达到19层时,模型退化现象就开始出现了。
总结起来,GoogleNet通过引入Inception模块、1x1卷积核、辅助分类器和全局平均池化等创新技术,在图像分类任务中取得了重大突破。它不仅在准确率方面表现优异,而且在参数量和计算效率方面也具备显著优势。
Inception V3是Google Inception系列中的第三个版本,也被称为GoogLeNet V3。它是Inception V1和V2的进一步改进,致力于提高深度神经网络在计算机视觉任务中的性能。
ResNet,全称为Residual Networks,是由Microsoft Research提出的一种深度学习神经网络架构。ResNet的主要创新是引入了残差学习的概念,通过使用残差块(Residual Block)来解决深度神经网络训练中的梯度消失和梯度爆炸问题。
在深度神经网络中,随着网络层数的增加,梯度逐渐减小,导致梯度消失。这使得网络在训练过程中难以学习到有效的特征表示,限制了模型的性能。
ResNet的残差学习的基本思想是,对于一个层的输入 x 和输出 H(x),网络不再学习整个映射 H(x),而是学习残差 F(x) = H(x)−x。这样,原始的映射可以被表示为 F(x)+x。通过这种残差连接,梯度可以直接传播到较早层,有助于提高网络的训练效率。这种设计使得网络可以更轻松地训练数百层甚至上千层的深度。
ResNet的典型结构包括多个堆叠的残差块,每个块内包含多个卷积层。**网络末尾通常包括全局平均池化层和全连接层,用于输出最终的分类结果。**ResNet在图像分类、目标检测等计算机视觉任务中取得了显著的成功,成为深度学习领域的重要里程碑之一。
ResNet其实可以看成和Inception一样是一个分支结构,只不过Inception分支上有卷积池化的操作,而ResNet没有这个操作。
分支结构加强了特征的提取能力,增加特征的多样性
DenseNet(Dense Convolutional Network)是一种具有密集连接的卷积神经网络, 在这个网络结构中任意两层之间均存在直接连接, 也就是说每一层的输入都是前面所有层输出的并集, 而该层所学习的特征图也会被直接传给其后面所有层作为输入。 DenseNet中的dense connectivity仅存在一个dense block中,不同dense block块之间是没有dense connectivity的。
密集连接的优点,缓解梯度消失的问题,能加强特征传播,增加特征复用,极大的减少参数量。
SeNet (Squeeze-and-Excitation Networks)是ImageNet 2017年分类任务冠军,**核心思是 : Squeeze(挤压、压缩)和 Excitation(激励)**两个操作其主要目的是通过显示的构建特征通道之间的相互依赖关系,采用特征重定向的策略,通过学习的方式自动的获取每个特征通道的重要程度, 然后依据这个重要程度去提升有用的特征,并抑制对于当前任务用处不大的特征。
Residual Attention Networks利用Residual和Attention机制进行网络结构的堆叠, 从而得到一个更深入的特征信息, 在每个attention module中会做一个适应性的变化, 采用上采样和下采样的结构。
LeNet-5模型是一个非常经典的卷积神经网络(CNN)模型,它在手写数字识别任务上取得了很好的性能。
LeNet-5模型由两个部分组成:特征提取部分和分类器部分:
LeNet-5模型接受灰度图像作为输入,图像的尺寸为32x32。在输入之前,通常需要对图像进行预处理,例如将像素值归一化到[0, 1]的范围,并进行中心化操作。
import torch
import torch.nn as nn
class LeNet(nn.Module):
def __init__(self):
super(LeNet, self).__init__()
self.features = nn.Sequential( # nn.Sequential 是PyTorch提供的一个容器,用于按照顺序组合各个层,形成一个网络模块
nn.Conv2d(in_channels=1, out_channels=20, kernel_size=(5, 5), stride=(1, 1), padding=0),
nn.ReLU(),
nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2)),
nn.Conv2d(in_channels=20, out_channels=50, kernel_size=(5, 5), stride=(1, 1), padding=0),
nn.ReLU(),
# nn.MaxPool2d(kernel_size=(2, 2), stride=(2, 2))
nn.AdaptiveMaxPool2d(output_size=(4, 4)) # 自适应池化,不管输入的feature map是多大,强制要求输出的feature map大小必须是output_size大小
)
self.classify = nn.Sequential( # 定义了神经网络的分类器部分,其中包括两个全连接层和一个ReLU激活函数
nn.Linear(50 * 4 * 4, 500), # 定义了一个全连接层,输入的大小为50x4x4=800,即特征提取部分的输出展平后的大小,输出的大小为500
nn.ReLU(),
nn.Linear(500, 10)
)
def forward(self, x):
"""
:param x: 原始图像数据, [N,1,28,28]
:return:
"""
z = self.features(x) # [N,1,28,28] -> [N,50,4,4]
z = z.view(-1, 800) # 将特征图z进行reshape操作,将其展平成一维向量
z = self.classify(z) # 将展平后的特征向量z输入到分类器部分self.classify中进行分类
return z
if __name__ == '__main__':
net = LeNet()
img = torch.randn(2, 1, 28, 28)
scores = net(img) # [N,1,28,28] -> [N,10] 获得得到的是每个样本属于10个类别的置信度
print(scores)
probs = torch.softmax(scores, dim=1) # 求解概率值
# print(probs)
AlexNet模型包含8个层次,其中有5个卷积层和3个全连接层。具体而言,模型的结构如下:
import torch
import torch.nn as nn
class AlexNet(nn.Module):
def __init__(self, device1, device2):
super(AlexNet, self).__init__()
self.device1 = device1
self.device2 = device2
self.feature11 = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=48, kernel_size=(11, 11), stride=(4, 4), padding=2),
nn.ReLU(),
nn.LocalResponseNorm(size=10),
nn.MaxPool2d(3, 2),
nn.Conv2d(48, 128, kernel_size=(5, 5), stride=(1, 1), padding='same'),
nn.LocalResponseNorm(size=30),
nn.ReLU(),
nn.MaxPool2d(3, 2),
).to(self.device1)
self.feature21 = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=48, kernel_size=(11, 11), stride=(4, 4), padding=2),
nn.ReLU(),
nn.LocalResponseNorm(size=10),
nn.MaxPool2d(2),
nn.Conv2d(48, 128, kernel_size=(5, 5), stride=(1, 1), padding='same'),
nn.LocalResponseNorm(size=30),
nn.ReLU(),
nn.MaxPool2d(3, 2)
).to(self.device2)
self.feature12 = nn.Sequential(
nn.Conv2d(256, 192, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(192, 128, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.MaxPool2d(3, 2)
).to(self.device1)
self.feature22 = nn.Sequential(
nn.Conv2d(256, 192, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(192, 128, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.MaxPool2d(2)
).to(self.device2)
self.classify = nn.Sequential( # 这段代码定义了一个分类器(classifier),它是一个由线性层(Linear)和激活函数ReLU组成的神经网络模型
nn.Linear(6 * 6 * 128 * 2, 4096), # 13×13池化后等于6×6
nn.ReLU(),
nn.Linear(4096, 4096),
nn.ReLU(),
nn.Linear(4096, 1000)
).to(self.device1)
def forward(self, x):
x1 = x.to(self.device1) # 将x复制到设备1
x2 = x.to(self.device2) # 将x复制到设备2
# 第一部分特征提取
oz1 = self.feature11(x1)
oz2 = self.feature21(x2)
# 两个通道的特征合并
z1 = torch.concat([oz1, oz2.to(self.device1)], dim=1)
z2 = torch.concat([oz1.to(self.device2), oz2], dim=1)
# 第二部分特征提取
z1 = self.feature12(z1)
z2 = self.feature22(z2)
# 两个通道的特征合并
z = torch.concat([z1, z2.to(self.device1)], dim=1)
z = z.view(-1, 6 * 6 * 128 * 2)
# 决策输出
z = self.classify(z)
return z
if __name__ == '__main__':
device1 = torch.device("cpu")
device2 = torch.device("cpu")
net = AlexNet(device1, device2)
img = torch.randn(2, 3, 224, 224)
scores = net(img)
print(scores)
probs = torch.softmax(scores, dim=1) # 求解概率值
print(probs)
# 参考pytorch中的默认实现
from torchvision import models
net = models.alexnet()
print(net)
import torch
import torch.nn as nn
class ZFNet(nn.Module):
def __init__(self):
super(ZFNet, self).__init__()
self.features = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=96, kernel_size=(7, 7), stride=(2, 2), padding=1),
nn.ReLU(),
nn.LocalResponseNorm(size=30),
nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2), padding=1),
nn.Conv2d(in_channels=96, out_channels=256, kernel_size=(5, 5), stride=(2, 2), padding=0),
nn.ReLU(),
nn.LocalResponseNorm(size=50),
nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2), padding=1),
nn.Conv2d(256, 384, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding='same'),
nn.ReLU(),
nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2))
)
self.classify = nn.Sequential(
nn.Linear(6 * 6 * 256, 4096),
nn.ReLU(),
nn.Linear(4096, 4096),
nn.ReLU(),
nn.Linear(4096, 1000)
)
def forward(self, x):
"""
:param x: 原始图像数据, [N,1,224,224]
:return:
"""
z = self.features(x) # [N,1,224,224] -> [N,256,6,6]
z = z.view(-1, 256 * 6 * 6) # reshape
z = self.classify(z)
return z
if __name__ == '__main__':
net = ZFNet()
img = torch.randn(2, 3, 224, 224)
scores = net(img)
print(scores)
probs = torch.softmax(scores, dim=1) # 求解概率值
print(probs)
文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大
文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码
文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版
文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗
文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程
文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0
文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader
文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型
文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写
文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录
文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点
文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文