24.9.1学习心得

2024-09-02 14:28
文章标签 学习心得 24.9

本文主要是介绍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()

这篇关于24.9.1学习心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130213

相关文章

Java EE学习心得

–Java EE学习心得     1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程…….. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程,完事后,再思考  我编的程序还有那些不好的地方和要改进的地方,可以增加写什么功能等等;然后再去编程; 2. 先搭建整体框架再抠细节,在编程中不管是什么要先做出来,再去问怎么做!即是:先K

3174. 清除数字(24.9.5)

题目 给你一个字符串s。你的任务是重复以下操作删除所有数字字符:删除第一个数字字符以及它左边最近的非数字字符。请你返回删除所有数字字符以后剩下的字符串。 示例 1: 输入:s="abc" 输出:"abc" 解释:字符串中没有数字。 示例 2: 输入:s="cb34" 输出:"" 解释:一开始,我们对s[2]执行操作,s变为"c4"。然后对s[1]执行操作,s变为空字符串。 提示: 1 <

Servelet学习-24.9.3

文章目录 前言一、Servelet概述1.1 简单入门:2.2 生命周期 二、HttpServletRequest对象2.1 常用方法 三、HttpServeletResponse对象 前言 九月,加油 一、Servelet概述 Servelet: server applet  servelet就是一个接口,定义了Java类被浏览器访问到的规则,内部一共包含了五个抽

24.9.1(康托展开)

上星期三: 补 24牛客多校 二 C                                                  牛客传送门 思路: 赛时写模拟写的很臭,如果用dp写就很方便 代码如下: const int N=2e6+10;const int mod=1e9+7;ll n;char s[N][2];int dp[N][2];void solve(){c

周报 | 24.8.26-24.9.1文章汇总

为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。 周报 | 24.8.19-24.8.25文章汇总-CSDN博客 python | 提升代码迭代速度的Python重载方法-CSDN博客 机器学习算法与Python学习 | 黑匣子被打开了?能玩的Transformer可视化解释工具!_研究别人的黑盒算法 机器学习 python-CSDN博客 极市平台 | 语言图像模型大一统!M

城市管理违规行为智能识别 Task3学习心得

本次学习主要针对数据集增强和模型预测 1、数据增强: 1)将四张训练图像组合成一张,增加物体尺度和位置的多样性。 2)复制一个图像的随机区域并粘贴到另一个图像上,生成新的训练样本 3)图像的随机旋转、缩放、平移和剪切,增加对几何变换的鲁棒性 4)通过线性组合两张图像及其标签创造合成图像,增加特征空间的泛化 5)一个支持多种增强技术的图像增强库,提供灵活的增强管道定义 6)对图像的色相

Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2

本次学习分类问题 1、分类与回归: 回归一般输出一个值y_hat 期望与y越接近越好。分类一般有几类就输出几个值,是一个one-hot的向量,在类别对应的位置值为1 本文介绍了一种重复输出数值后加权的方法,但是我做分类一般用全连接层直接输出多个值,然后使用argmax函数 2、softmax: 公式: 其实主要是一个归一化的作用,并且输出所有值的和为1,这样就类似于每一个类别的概率;并

【60天备战2024年11月软考高级系统架构设计师——第0天:详细规划与学习心得】

开篇 2024年11月的软考高级系统架构设计师考试即将到来,留给我们的时间不多了。在这60天的时间里,我决定全力以赴,通过系统的学习和高效的复习,争取在考试中取得理想的成绩(必拿下)。这篇博客将分享我为备考制定的详细学习计划,以及如何在紧张的时间里高效学习。 第一部分:备考规划概述 要在两个月内通过高级系统架构设计师考试,合理的学习计划是关键。我将整个备考过程划分为四个阶段:基础知识复习、重

Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2

本次学习主要针对自适应学习率;介绍了Adagrad,RMSprop和Adam优化器 1、为什么需要自适应学习率: 训练一个网络,在走到临界点的时候损失不再下降,而梯度并没有变得很小。相当于下坡路在两步之间,而步子迈大了,直接把下坡路跳过了,又走到上坡路上了。在这时候就需要把学习率(步幅)调低一点让梯度继续下降。 但是常规的 学习率下降方法是不够用的,我们希望在梯度大的时候走慢点,在梯度小的时

24.8.26学习心得

验证数据集(Validation Set)和测试数据集(Test Set)在机器学习和深度学习中都是非常重要的概念。它们各自有不同的用途和目的。下面详细解释两者之间的区别: 1. 验证数据集(Validation Set) 目的: 超参数调整:验证数据集主要用于调整模型的超参数,如学习率、正则化系数、网络层数等。模型选择:用于选择最佳模型。例如,在交叉验证中,通过在验证数据集上的表现来选择性