24.9.1学习心得

VGG(Visual Geometry Group)网络是由牛津大学视觉几何小组提出的一种卷积神经网络模型,该模型因其在ImageNet大规模视觉识别挑战赛(ILSVRC 2014)中的优异表现而闻名。VGG模型的特点在于其架构的简单性和一致性,以及对参数数量的大量使用,这使得它成为了深度学习领域中一个非常受欢迎的基础模型。

VGG架构的主要特点包括:

  1. 堆叠的3x3卷积层:VGG网络使用了多个连续的3x3卷积核来构建其网络层,这种设计允许增加网络的深度而不显著增加参数的数量。3x3的小型滤波器有助于捕捉局部特征,并且通过堆叠可以构建更大范围的感受野。

  2. Max Pooling层:在网络中每经过几次卷积后就会有一个2x2大小的Max Pooling层,用于降低空间维度,同时保持深度不变。

  3. 全连接层:在卷积层之后,通常会有几个全连接层用于分类任务。原版VGG模型包含三个全连接层,但在实践中有时会减少以防止过拟合。

VGG的不同变体:

VGG模型有几种不同的配置,主要区别在于层数不同。其中最常用的是VGG16和VGG19,表示网络中有16个和19个可学习的层(卷积层和全连接层)。以下是VGG16的一个简化示例结构:

  • 输入图像大小:224x224x3
  • 第一部分:两个3x3卷积层(输出64通道),一个2x2 Max Pooling层
  • 第二部分:两个3x3卷积层(输出128通道),一个2x2 Max Pooling层
  • 第三部分:三个3x3卷积层(输出256通道),一个2x2 Max Pooling层
  • 第四部分:三个3x3卷积层(输出512通道),一个2x2 Max Pooling层
  • 第五部分:三个3x3卷积层(输出512通道),一个2x2 Max Pooling层
  • 全连接层:三个全连接层,每个层有4096个节点,最后接一个softmax分类层

VGG的优点:

  • 结构清晰,容易实现。
  • 深度的增加可以提高性能。
  • 在很多基准数据集上都取得了很好的结果。

VGG的缺点:

  • 参数量大,对于计算资源要求较高。
  • 全连接层可能导致过拟合,尤其是在小数据集上。
  • 训练时间较长。

尽管VGG网络由于其较大的模型大小和计算需求,在某些方面已经被更高效的网络结构所取代,但它仍然是理解卷积神经网络工作原理的一个重要参考点。

代码如下:

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, Dropoutdef VGG16(input_shape=(224, 224, 3), num_classes=1000):input_img = Input(shape=input_shape)# Block 1x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(input_img)x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)# Block 2x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)# Block 3x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)# Block 4x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)# Block 5x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x)# Classification blockx = Flatten(name='flatten')(x)x = Dense(4096, activation='relu', name='fc1')(x)x = Dropout(0.5)(x)x = Dense(4096, activation='relu', name='fc2')(x)x = Dropout(0.5)(x)output = Dense(num_classes, activation='softmax', name='predictions')(x)# Create model.model = Model(inputs=input_img, outputs=output, name='VGG16')return model# 实例化模型
model = VGG16()
model.summary()

NIN(Network In Network)是一种卷积神经网络(CNN)架构,由Min Lin等人在2013年提出。它的主要创新点是在传统的卷积层之后引入了“微网络”(Micro-Networks),这些微网络通常是小型的多层感知机(MLP, Multi-Layer Perceptron),用于替代传统的卷积层+非线性激活函数的模式。NIN的设计目的是为了增强模型的表征能力,并且在一定程度上减少参数的数量。

NIN的关键组成部分:

  1. 1x1卷积层(微网络):NIN中引入了1x1卷积的概念,这实际上就是一种特殊的全连接层,但它作用在一个特定的位置上,而不是整个图像。1x1卷积可以在不改变输入的空间尺寸的情况下改变其深度(通道数),因此常被用作特征变换。在NIN中,这些1x1卷积层被组织成多层感知机的形式,形成所谓的“微网络”。

  2. 全局平均池化(Global Average Pooling, GAP:NIN使用全局平均池化层来代替传统CNN中的全连接层。GAP层接收最后一个卷积层的输出,并将其所有空间位置上的值求平均,从而生成一个固定长度的向量,直接用于分类。这种方法减少了对权重参数的需求,同时也减轻了过拟合的风险。

NIN的架构:

NIN的基本架构包括以下几个部分:

  • 输入层:接受原始图像数据。
  • 多个“微网络”层:每个微网络层包含多个1x1卷积层组成的多层感知机,用于特征转换。
  • 传统的卷积层和最大池化层:用于提取空间特征。
  • 全局平均池化层:将特征图转换为固定长度的向量。
  • 输出层:用于分类任务。

一个典型的NIN模型结构如下所示:

  • 输入图像大小:224x224x3
  • 第一个微网络:1x1卷积层(假设输出通道数为96),ReLU激活
  • 传统的3x3卷积层(输出通道数为96)和最大池化层
  • 第二个微网络:类似第一个微网络的结构,但输出通道数可能不同
  • 又一组传统卷积层和最大池化层
  • 第三个微网络
  • 最后的传统卷积层和最大池化层
  • 全局平均池化层
  • 输出层:使用Softmax激活函数进行分类

NIN的优点:

  • 通过引入1x1卷积层,增强了模型的非线性表达能力。
  • 使用全局平均池化减少了参数数量,并有助于缓解过拟合。
  • 架构灵活,易于扩展和调整。

NIN的缺点:

  • 相比于后来的一些高效网络结构(如ResNet、Inception等),NIN在计算效率和模型精度上可能不占优势。
  • 对于非常大的数据集,NIN可能需要更多的计算资源来进行训练。

尽管NIN并不是当前最先进的模型,但它引入的概念如1x1卷积和全局平均池化在现代深度学习中仍然有着广泛的应用。

import tensorflow as tf
from tensorflow.keras import layers, models# 定义一个NIN块,它包含三个卷积层,其中第一层可以是有大小的卷积核,后两层都是1x1卷积核。
def nin_block(in_channels, out_channels, kernel_size, strides=1, padding='valid'):return tf.keras.models.Sequential([# 第一层卷积,使用给定的kernel_size,stride和padding参数layers.Conv2D(out_channels, kernel_size, strides=strides, padding=padding, activation='relu'),# 第二层卷积,1x1卷积核,用于特征变换layers.Conv2D(out_channels, kernel_size=1, activation='relu'),# 第三层卷积,也是1x1卷积核,进一步变换特征layers.Conv2D(out_channels, kernel_size=1, activation='relu')])# 定义整个NIN模型
def tiny_nin_model():# 创建一个Sequential模型,方便按顺序添加层net = tf.keras.models.Sequential([# 第一个NIN块,输入通道数为1(例如灰度图像),输出通道数为96nin_block(1, 96, kernel_size=11, strides=4, padding='valid'),# 最大池化层,减少空间维度layers.MaxPooling2D(pool_size=3, strides=2),# 第二个NIN块,输入通道数为96,输出通道数为256nin_block(96, 256, kernel_size=5, strides=1, padding='same'),# 再次使用最大池化层layers.MaxPooling2D(pool_size=3, strides=2),# 第三个NIN块,输入通道数为256,输出通道数为384nin_block(256, 384, kernel_size=3, strides=1, padding='same'),# 再次使用最大池化层layers.MaxPooling2D(pool_size=3, strides=2),# Dropout层,防止过拟合layers.Dropout(0.5),# 第四个NIN块,作为分类层的一部分,输出通道数等于类别数(这里是10类)nin_block(384, 10, kernel_size=3, strides=1, padding='same'),# 全局平均池化层,将特征图转换为一个固定长度的向量layers.GlobalAveragePooling2D(),# 将输出形状从(1, 1, 10)转换为(10,),以便用于分类layers.Reshape((10,))])return net# 创建模型实例
model = tiny_nin_model()

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

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

相关文章

XSS 漏洞 - 学习手册

接下来的日子我会按照目录进行笔记的更新,待本模块更新完毕后,删除此条注释。 备注:即使是更新完了,我知道也会有不足,所以会不定期添加或者删除或者优化某些内容,感兴趣的小伙伴可以关注一波。 0x01&#…

通义说【线性代数】线性方程组和线性代数的关系

线性方程组和线性代数之间有非常紧密的关系。事实上,线性方程组是线性代数的一个核心主题,而线性代数提供了解决线性方程组的一系列理论和工具。 线性方程组 线性方程组是由一组线性方程构成的集合,每个方程都表示未知变量的线性组合等于一…

天气数据爬取

目录 历史气象数据获取浏览器访问模拟 历史气象数据获取 主要的python包 requests BeautifulSoup re pandas lxml 浏览器访问模拟 根据浏览器Request-Header参数,让request模拟浏览器行为 import requests from bs4 import BeautifulSoup import re import pandas…

C#线程同步

c#线程同步代码示例 仔细考虑下面这段代码是不是输出0 const int _max 1000000;private int _count 0;void Start(){Task task Task.Run(() >{Decr();});for (int i 0; i < _max; i){_count;}task.Wait();Debug.Log(_count);}void Decr(){for(int i 0; i < _max;…

国内招聘市场发展历程

大数据、人工智能与社交媒体深度融合&#xff0c;传统招聘网站用户粘性低、信息传播效率低、招聘成本开支大、平台运营与宣传成本高昂&#xff0c;返利招聘或许是一种创新性的解决方案。本文将以蜂媒招聘网为例&#xff0c;深入探讨返利招聘模式的社群属性、用户粘度属性及自助…

一个比 Nginx 还简单的 Web 服务器

企业级的 Web 服务器非常多&#xff0c;Nginx、Tomcat、Apache、IIS、FastAPI、Flask 等。今天松哥再给大家介绍一个开源的 Web 服务器&#xff0c;这款服务器具备自动 HTTPS 功能和高度可配置性&#xff0c;它的名字是&#xff1a;Caddy。 Caddy 是一个 Go 编写的 Web 服务器&…

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求&#xff1a; 编写一个解决方案&#xff0c;找出至少有五个直接下属的经理 数据准备&#xff1a; Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中&#xff0c;动态调整学习率&#xff08;Learning Rate Scheduling&#xff09;是一种常用的技术&#xff0c; 用于在训练过程中根据一定的策略调整学习率&#xff0c;以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略&#xff1a; 1. **固定步长…

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

【awk 】如何将一个文件按照同名字段进行合并?

目录 题目解答 题目 使用awk文本处理工具将一个名为c的文件按照同名字段进行合并&#xff0c;c的内容如下所示&#xff1a; 192.168.1.1: httpd 192.168.1.1: tomcat 192.168.1.2: httpd 192.168.1.2: postfix 192.168.1.3: mysqld 192.168.1.4: httpd示例输出&#xff1a; …

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

【微信小程序】Mobx--绑定多个 store 以及命名空间

在实际开发中&#xff0c;一个页面或者组件可能会绑定多个 Store &#xff0c;这时候我们可以将 storeBindings 改造成数组。数组每一项就是一个个要绑定的 Store。 如果多个 Store 中存在相同的数据&#xff0c;显示会出现异常。还可以通过 namespace 属性给当前 Store 开启命…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何成为一个飞控算法工程师?

兄弟&#xff0c;这个问题问得好&#xff0c;但也别想着靠看几本书就能一步登天。飞控算法这玩意儿&#xff0c;真要干好了&#xff0c;不是简简单单几个公式几个库就能搞定的。你本科电子专业有点基础&#xff0c;玩过四轴飞行器也算是入门了&#xff0c;但要搞真算法&#xf…

机器学习工具

机器学习常用工具及库 环境依赖管理 Docker https://www.oracle.com/cn/cloud/cloud-native/container-registry/what-is-docker/ 隔离部署工具&#xff0c;能有效解决环境问题 Conda与Anaconda conda作为Python数据科学领域的常用软件&#xff0c;是对Python环境及相关依…

第8讲 ,ISP 串口程序下载

1 硬件的连接 需要使用 串口下载软件。 flymcu 这是 正点原子的 自启动电路。 2 stm32 的串口下载的原理 stm32 下载 只能是 串口一 &#xff0c; 也就是 PA9&#xff0c; PA10 3 然后是 stm32 的启动顺序 这里使用的是 第二种的 启动模式&#xff0c; 也就是 通过 串口进行烧…

如何使用IDEA搭建Mybatis框架环境(详细教程)

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 &#x1f379;一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 &#x1f9cb;二、 MyBatis框架的优缺…

Unity获取SceneView尺寸

获取SceneView尺寸 var sceneView SceneView.lastActiveSceneView; var size new Vector2(sceneView.position.width,sceneView.position.height);

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

Ansible自动化运维实战:打造高效、可靠的系统管理方案!

Ansible是一个在自动化运维领域广泛使用的工具&#xff0c;它基于Python开发&#xff0c;能够实现批量系统配置、程序部署和运行命令等功能。以下将详细解析Ansible自动化运维项目的构建与应用&#xff1a; 项目结构设计 ansible.cfg&#xff1a;这是Ansible的主配置文件。inv…