PyTorch复现网络模型VGG

VGG

  1. 原论文地址:https://arxiv.org/abs/1409.1556
  2. VGGVisual Geometry Group(视觉几何组)的缩写,它是一个在计算机视觉领域中非常有影响力的研究团队,主要隶属于牛津大学的工程系和科学系。VGG以其对卷积神经网络(Convolutional Neural Networks, CNNs)结构的研究而闻名,特别是在ILSVRCImageNet Large Scale Visual Recognition Challenge)竞赛中取得了显著的成绩。
    VGG网络是VGG团队提出的一系列深度卷积神经网络模型,其中最著名的是VGG-16VGG-19。这些模型以其简洁的架构和强大的性能而受到广泛关注。VGG网络的主要特点包括:
    (1)使用小尺寸的卷积核(3x3)和最大池化层(2x2)来构建深度网络。
    (2)通过堆叠多个小卷积核来模拟大尺寸卷积核的感受野,同时减少参数数量。
    (3)在整个网络中保持卷积核尺寸和步长的一致性,使得网络结构更加规整。
    (4)使用多个全连接层进行分类任务的输出。
    VGG网络的性能在2014年当时是非常出色的,成为了计算机视觉任务中的基准模型之一。虽然现在有一些更先进的网络架构(如ResNetDenseNet等)已经超越了VGG在某些方面的性能,但VGG仍然是一个值得学习和了解的经典模型。

感受野

(1)感受野(Receptive Field)是卷积神经网络(Convolutional Neural Networks, CNNs)中的一个重要概念,它指的是网络内部的不同位置的神经元对原图像的感受范围的大小。在卷积神经网络中,每个神经元都只与输入数据的一个局部区域相连,这个局部区域就是该神经元的感受野。随着网络层次的加深,每个神经元对于输入数据的感受野会逐渐扩大,从而能够提取更加抽象和全局的特征。
(2) 感受野的大小可以通过计算得到,它与卷积核的大小、步长(stride)和填充(padding)等超参数有关。在一般的卷积神经网络中,感受野的大小会随着卷积层的加深而指数级增长。因此,深层卷积神经网络中的神经元可以具有非常大的感受野,能够覆盖输入图像的大部分区域甚至整个图像。
在这里插入图片描述

VGG网络结构

  1. 论文中介绍,从A-E,分别有11、11、13、16、16、19层,用的比较多的是VGG-16模型和VGG-19模型。
  2. VGG-16模型包括13层卷积层和3层全连接层。
    在这里插入图片描述
  3. 视频中截取的模型结构图
    在这里插入图片描述
  4. 根据论文画出网络模型图,13个卷积层和3个全连接层。
    在这里插入图片描述

网络模型复现代码

# 定义训练网络 VGG-16
import torch
from torch import nn
from torch.nn import functional as F
from torchinfo import summaryclass VGG16(nn.Module):def __init__(self):super().__init__()# 定义网络结构# conv1self.conv1 = nn.Conv2d(3, 64, 3, padding=1)self.conv2 = nn.Conv2d(64, 64, 3, padding=1)self.pool1 = nn.MaxPool2d(2)# conv2self.conv3 = nn.Conv2d(64, 128, 3, padding=1)self.conv4 = nn.Conv2d(128, 128, 3, padding=1)self.pool2 = nn.MaxPool2d(2)# conv3self.conv5 = nn.Conv2d(128, 256, 3, padding=1)self.conv6 = nn.Conv2d(256, 256, 3, padding=1)self.conv7 = nn.Conv2d(256, 256, 3, padding=1)self.pool3 = nn.MaxPool2d(2)# conv4self.conv8 = nn.Conv2d(256, 512, 3, padding=1)self.conv9 = nn.Conv2d(512, 512, 3, padding=1)self.conv10 = nn.Conv2d(512, 512, 3, padding=1)self.pool4 = nn.MaxPool2d(2)# conv5self.conv11 = nn.Conv2d(512, 512, 3, padding=1)self.conv12 = nn.Conv2d(512, 512, 3, padding=1)self.conv13 = nn.Conv2d(512, 512, 3, padding=1)self.pool5 = nn.MaxPool2d(2)# fc1self.lr1 = nn.Linear(7 * 7 * 512, 4096)# fc2self.lr2 = nn.Linear(4096, 4096)# fc3self.lr3 = nn.Linear(4096, 1000)def forward(self, x):x = F.relu(self.conv1(x))x = self.pool1(F.relu(self.conv2(x)))x = F.relu(self.conv3(x))x = self.pool2(F.relu(self.conv4(x)))x = F.relu(self.conv5(x))x = F.relu(self.conv6(x))x = self.pool3(F.relu(self.conv7(x)))x = F.relu(self.conv8(x))x = F.relu(self.conv9(x))x = self.pool4(F.relu(self.conv10(x)))x = F.relu(self.conv11(x))x = F.relu(self.conv12(x))x = self.pool5(F.relu(self.conv13(x)))x = x.view(-1, 7 * 7 * 512)  # 铺平x = F.relu(self.lr1(F.dropout(x, p=0.5)))x = F.relu(self.lr2(F.dropout(x, p=0.5)))output = F.softmax(self.lr3(x), dim=1)vgg = VGG16()
# 网络结构可视化
summary(vgg, input_size=(10, 3, 224, 224))
  1. Pycharm运行输出结果,可以可视化VGG的网络结构和运行信息。
    在这里插入图片描述
  2. 代码仓库:deeplearning

网络结构可视化torchinfo

  1. 介绍
    torchinfo是一个用于PyTorch模型信息打印的Python包。它提供了一种简单而快速的方法来打印PyTorch模型的参数数量、计算图和内存使用情况等有用的信息,从而帮助深度学习开发人员更好地理解和优化他们的模型。具体来说,torchinfo可以用于打印网络的每一层尺寸等信息,使得开发人员能够更清晰地了解模型的结构和参数。
    例如,使用torchinfo库的summary函数,可以轻松地打印出模型的结构信息,包括每一层的名称、类型、输出形状和参数数量等。这对于调试模型、优化模型结构以及进行模型剪枝等操作都非常有帮助。
    总的来说,torchinfo是一个非常实用的工具,可以帮助PyTorch开发人员更好地理解和优化他们的模型。
    ——【文心一言】
  2. 安装:conda install -c conda-forge torchinfo (或pip install torchinfo

参考

  1. 使用Pytorch复现经典网络架构VGG_哔哩哔哩_bilibili
  2. PyTorch复现网络模型VGG

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

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

相关文章

Ubuntu(22.04):解决升级后在VirtualBox中的启动非常慢的问题

Ubuntu22.04是通过VirtualBox的虚机安装的,最近升级了Ubuntu22.04后,每次启动都非常的慢 $ systemd-analyze blame 5min 2.287s plymouth-quit-wait.service 5min 18ms vboxadd.service 可以看到是这两个服务启动的非常耗时,各用了5分钟多。 …

Vue3_基础使用

vue2的选项式与vue3的组合式区别: 选项式:vue2中数据与方法计算属性等等,针对一个数据的处理在不同的配置中,当业务复杂时很难维护,修改起来也不好查找。 vue3的组合式:将针对数据的方法计算属性等等放在一…

计算岛屿的数量-算法题(字节笔试题,做出来了,也被撸了)

题目 有一个二维数组,其中每个元素要么是1或者0,1表示土地,连起来的1表示一个岛屿,0表示海,请计算出来二维数组用有多少个岛屿 比如: {{1, 1, 1, 0, 1},{0, 1, 0, 1, 0},{1, 0, 1, 1, 1},{1, 1, 0, 1, 0…

opencv学习 机器学习

Kmeans double cv::kmeans(InputArray dataint k InputOutputArray bestLabels //输出的所有样本的标签数组TermCriteria criteriaint attempts //采样不同初始化标签的尝试次数int flag // 中心点初始化方法,支持KMEANS_RANDOM_CENTERS//KMEANS_PP_CENTERS//KMEA…

FPGA高端项目:Xilinx Zynq7020系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本本方案的Xilinx Artix7系列…

【SVN在Linux下的常用指令】

windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说。主要说说linux下svn的使用,因为linux下大部分的操作都是通过命令行来进行,所…

深度解读 BigANN 2023 四大赛题,向量搜索还有更好的解决方案?

近年来,向量搜索大赛 BigANN 一直是行业关注的焦点。原因在于,BigANN 不仅是在向量搜索领域具有强大影响力的比赛,开发者在赛后贡献出的相关解决方案更是行业进步与发展的重要动力。 向量检索大赛 BigANN 旨在提升大规模 ANN 的研究创新和生产…

Django如何调用机器学习模型进行预测

Django是一个流行的Python Web框架,它可以很方便地集成机器学习模型,进行预测和推理。我将介绍如何在Django项目中调用训练好的机器学习模型,并实现一个预测接口。 准备工作 首先我们需要一个训练好的机器学习模型。这里我们使用Scikit-Learn训练一个简单的线性回归模型作为示…

Django模型(八)

一、修改数据 先获取对象,通过对象属性更新数据,再保存 (更新单一数据)通过QuerySet的update函数更新数据 (更新多条数据) #单条记录修改 save c = Cook.objects.get(pk=1) c.name = 安妮 c.save()# 更新多个值 update Cook.objects.filter(sect=粤菜).update(level=5)1.1、…

Methodot低代码实战教程(一)——熟悉可视化Echart组件

一、产品介绍: Methodot是行云创新旗下一款面向研发使用的一站式云原生开发及应用托管平台,产品内有大量开箱即用的服务和开发工具,例如: 支持开发团队进行微服务架构设计(例如一个袜子商店管理系统)&…

win11安装MySql5.7

1、下载 打开下载链接:MySQL :: Download MySQL Installer 2、安装 2.1、安装界面 2.2、选择自定义安装 2.3、根据自己系统的位数进行选择是X64还是X86 2.4、选择安装路径 2.5、继续下一步 2.6、选择服务器专用,端口是3306 2.7、设置密码 2.8、设置服…

2024美赛数学建模E题思路源码

比赛当天第一时间更新! 赛题目的 赛题目的: 问题描述: 解题的关键: 问题一. 问题分析 问题解答 问题二. 问题分析 问题解答 问题三. 问题分析 问题解答 问题四. 问题分析 问题解答 问题五. 问题分析 问题解答

Python系列-字典

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” ​ 目录 ​ 字典是什么 创建字典 查找key 新增/修改元素 删除元素 遍历字典元素 取出所有的key和value 合成的key类型 ​编辑 小结 字典是什么 字典是一种存储键值对的结…

开箱即用的Linux系统

经常会遇到这样的场景,临时需要演示一下linux环境,安装虚拟机耗时耗资源,如果有一个开箱即用的linux,而且还能包括主流的linux环境就好了。instantbox 是一个这样的项目,几秒内启动一个主流的 Linux 系统,支…

船员投保的数学模型(MATLAB求解)

1.问题描述 劳动工伤事故,即我们平时所说的“工伤事故”,也称职业伤害,是指劳动者在生产岗位上,从事与生产劳动有关的工作中发生的人身伤害事故、急性中毒事故或职业病。船员劳动工伤事故是指船员在船舶生产岗位上,从…

第七讲_JavaScript的Iterator和Generator

JavaScript的Iterator和Generator 1. Iterator1.2 for-of语法糖 2. Generator2.1 定义一个生成器函数2.2 常用的方法2.3 基本用法2.4 传参的用法2.5 异步的用法 1. Iterator ES6 中,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性。一个数据结构只要拥…

字节跳动新一代云原生消息队列实践

作者:火山引擎云原生计算研发工程师|雷丽媛 上文我们了解了在字节跳动内部业务快速增长的推动下,经典消息队列 Kafka 的劣势开始逐渐暴露,在弹性、规模、成本及运维方面都无法满足业务需求。因此字节消息队列团队研发了计算存储分…

RISC-V指令集之RV32I

RISC-V指令集之RV32I 1 RV32I的寄存器2 RV32I的指令2.1 算术运算指令2.2 逻辑运算指令2.3 移位运算指令2.4 内存读写指令2.5 分支与跳转指令 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RV32I的寄存器 如下图,列出了RV32I 寄存器…

力扣hot100 数据流的中位数 大小根堆

Problem: 295. 数据流的中位数 文章目录 思路复杂度💖 Code 思路 👨‍🏫 参考 大根堆维护较小值(堆顶即中位数),小根堆维护较大值(堆顶可能是中位数之一)维护小堆长度较长&#x…

idea搭建spring5.3.x源码环境

1.写在前面的话 碰到了不少想阅读或者学习spring源码的同学,但是第一步搭建这个源码阅读环境就能难倒了一大批人。下面我就以spring5.3.x这个源码分支,来具体演示一下搭建过程。 2. 下载源码 下载源码这一步,说实话,由于某些原…