01-AlexNet and VGG

一.CNN结构演化图

CNN结构演化图

二.AlexNet网络

  • 论文来源:2012年Alex的论文《ImageNet Classification with Deep Convolutional Neural Networks》
  • 深度学习领域经典模型之一
  • 依附ImageNet大数据集合
  • 通过GPU加强了高并行预算能力
  • 用到了网络变深、数据增强、ReLU、Dropout等改进算法
  • AlexNet拥有8层网络结构,最后一层全连接层是1000-way的softmax分类输出层。

在这里插入图片描述
上图的网络结构使用两块GPU进行训练。一个GPU运行图上方的层,另一个运行图下方的层。两个GPU只在特定的层通信。

8层网络(5层卷积层,3层全连接层):
  • conv1: 96 11x11x3 (对224x224x3的输入图像以4个像素为步长进行滤波)
    • 卷积核大小:11x11 | 步长:4 | 数量:48x2 | 池化:3x3 | stride:2
    • 激活函数ReLU、标准化
    • 参数量:96x11x11x3 34848个参数
    • 最终输出归一化后数据:27x27x48x2
  • conv2: 256 5x5x48(将上层经过响应归一化和池化的输出作为输入)
    • 卷积核大小:5x5 | 步长:1 | 数量:128x2 | 池化:3x3 | stride:2
    • 激活函数ReLU、标准化
    • 参数量:256x5x5x48 307200个参数
    • 最终输出归一化后数据:13x13x128x2
  • conv3: 384 3x3x256(在没有池化或者归一化层介入的情况下相互连接)
    • 卷积核大小:3x3 | 步长:1 | 数量:192x2
    • 激活函数ReLU
    • 参数量:384x3x3x192 884736个参数
    • 最终输出归一化后数据:13x13x192x2
  • conv4: 384 3x3x192(在没有池化或者归一化层介入的情况下相互连接)
    • 卷积核大小:3x3 | 步长:1 | 数量:192x2
    • 激活函数ReLU
    • 参数量:384x3x3x192 663552个参数
    • 最终输出归一化后数据:13x13x192x2
  • conv5: 256 3x3x192(在没有池化或者归一化层介入的情况下相互连接)
    • 卷积核大小:3x3 | 步长:1 | 数量:128x2 | 池化:3x3 | stride:2
    • 激活函数ReLU
    • 参数量:256x3x3x192 442368个参数
    • 最终输出归一化后数据:6x6x128x2
  • fc6: 2048x2(两个GPU,共2048x2=4096个神经元)+ dropout
    • 参数量:4096x6x6x256 37748736个参数(极大)
    • 最终输出神经元点:4096个
  • fc7: 2048x2(两个GPU,共2048x2=4096个神经元)+ dropout
    • 参数量:4096x4096 16777216个参数
    • 最终输出神经元点:4096个
  • fc8: 1000个类别,softmax输出层
    • 参数量:4096x1000 4096000个参数
    • 最终输出分类:1000个

conv1: 96 11x11x3(卷积核个数 卷积核宽度卷积核高度厚度)
步长:核特征图中相邻神经元感受域中心之间的距离

ReLU非线性激活函数:
  • 常见的激活函数:

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 与传统的Tanh、Logistic或者sigmoid的区别:

    • 不像sigmoid函数一样要进行复杂的指数运算,缩短了训练时间,一定程度避免了梯度消失
    • ReLU本质上是分段线性模型,前向计算非常简单,无需指数之类操作
    • ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作
    • ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0
    • ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合
  • 缺点:

    • ReLU神经元较脆弱,在接受非常大梯度流后,参数可能变负并造成正向传播输入都为0,造成神经元‘死亡’,因此不建议使用太大学习率
Overlap Max pooling
  • 此前CNN普遍使用average pooling,得到的是模糊化的效果。
  • max pooling更多的保留纹理信息。
  • 让Pooling的步长(stride)小于池化核的尺寸(Kernel Size),池化层的输出之间就会有重叠和覆盖,提升了特征的丰富性。
    在这里插入图片描述
降低过拟合( Reducing Overfitting)
  • 数据增强(Data Augmentation):
    • 方法1:生成平移图像和水平翻转图像。将原始的256256大小的图片随机剪裁成为224224大小的图片,并进行随机翻转。这一操作使得数据集扩大了(256-224)*(256-224)2=2048倍。而在测试时,将输入的图片以及其水平翻转在四角与正中分别裁剪下224224大小的10个子图,并将这10个大小的子图送入AlexNet,求其softmax输出层的平均。
    • 方法2:改变训练图像的RGB通道的强度。使用PCA对图像的RGB通道进行降维,提取出三个通道的特征向量和特征值,然后对每个特征向量乘以一个标准差为0.1,均值为0的高斯分布的α。
  • Dropout(随机忽略一部分神经元):
    - 全连接层用了Dropout来做正则化。Dropout对每个节点以概率p使之失能,相当于一个集成学习的方法。
    - 对每个神经元设置一个keep_prob(训练设0.5,测试设1.0并输出乘0.5-关闭dropout并保证测试与训练输出均值相近),随机删除一部分神经元(输出置0),使其不参与网络的正向和反向传播。因为每次都是随机抽取,因此可以有效避免过拟合。
  • 重叠池化(Overlapping Pooling):
    • CNNs中的池化层归纳了同一个核特征图中的相邻神经元组的输出
    • 如果令S=Z,将会得到CNNs通常采用的局部池化。若令S<Z,则得到重叠池
  • LRN(Local Response Normalization) 局部响应均值
    • 局部归一的动机:生物学中有个概念叫做侧抑制,是指被激活的神经元抑制相邻神经元,归一化的目的是“抑制”,局部相应归一化就是借鉴侧抑制来实现局部抑制。
    • LRN利用相邻feature map做特征显著化降低错误率,公式如下图
    • 在这里插入图片描述
    • 由于LRN层的作用不大暂不做具体深入

三.VGG网络

  • VGG 网络是由conv、pool、fc、softmax层组成,层数上更深特征图更宽。
  • 小卷积核:网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚(极少用了1x1)。
    • 1x1卷积核:降维,增加非线性性(ReLU的效果)
    • 3x3卷积核:多个卷积核叠加,增加空间感受野,减少参数
  • 小池化核:相比AlexNet的3x3的池化核,VGG全部为2x2的池化核
  • 耗费较多计算资源,特别是第一个全连接层
  • VGG最大的贡献是证明了卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用。
    在这里插入图片描述
    在这里插入图片描述
  • 小卷积核:
    • 卷积不仅涉及到计算量(卷积核尺寸小的计算量小,由下图可知),还影响到感受野。
  • 感受野:
    • 可用两层33的卷积层替代55卷积,效果相当。而3个3x3卷积的堆叠获取到的感受野相当于一个7x7的卷积。
      在这里插入图片描述
  • 全连接卷积:
    • VGG的作者把训练阶段的全连接替换为卷积是参考了OverFeat的工作,OverFeat将全连接换成卷积后,带来可以处理任意分辨率(在整张图)上计算卷积,而无需对原图resize的优势。
    • 在这里插入图片描述
  • 1x1卷积:
    • VGG在最后三个阶段用1x1卷积核是为了在维度上继承全连接
  • AlexNet 和 VGGNet的对比图:
  • 在这里插入图片描述

四.pytorch搭建卷积神经网络及训练

在这里插入图片描述

  1. 模型的创建:
    在torchvision.models已有模型上做修改,如采用与训练模型,需修改最后分类类别,修改全连接层的最后一层
#vgg16
model.classifier = nn.Sequential(nn.Linear(25088, 4096),     
	                             nn.ReLU(),
	                             nn.Dropout(p=0.5),
	                             nn.Linear(4096, 4096),
	                             nn.ReLU(),
	                             nn.Dropout(p=0.5),
	                             nn.Linear(4096, 2))
#Alexnet
alexnet_model.classifier = nn.Sequential(
						   nn.Dropout(),
			               nn.Linear(256 * 6 * 6, 4096),
			               nn.ReLU(inplace=True),
			               nn.Dropout(),
			               nn.Linear(4096, 4096),
			               nn.ReLU(inplace=True),
			               nn.Linear(4096, 2),
#如采用预训练模型,需修改
for index, parma in enumerate(model.classifier.parameters(
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值