Pytorch实战(二)

文章目录

  • 前言
  • 一、LeNet5原理
    • 1.1LeNet5网络结构
    • 1.2LeNet网络参数
    • 1.3LeNet5网络总结
  • 二、AlexNext
    • 2.1AlexNet网络结构
    • 2.2AlexNet网络参数
    • 2.3Dropout操作
    • 2.4PCA图像增强
    • 2.5LRN正则化
    • 2.6AlexNet总结
  • 三、实战
    • 3.1LeNet5模型搭建
    • 3.2模型训练


前言

  参考原视频:哔哩哔哩。

一、LeNet5原理

1.1LeNet5网络结构

在这里插入图片描述
  LeNet-5,其中, 5 5 5表示神经网络中带有参数的网络层数量为 5 5 5,如卷积层带有参数 ( w , b ) (w,b) (w,b),而池化层仅仅是一种操作,并不带有参数,而在LeNet-5中共含有两层卷积层、三层全连接层(有一层未标出)。
在这里插入图片描述

  • 卷积层和池化层:用于提取特征。
  • 全连接层:一般位于整个卷积神经网络的最后,负责将卷积输出的二维特征图转化成一维的一个向量(将特征空间映射到标记空间),由此实现了端到端的学习过程(即:输入一张图像或一段语音,输出一个向量或信息)。全连接层的每一个结点都与上一层的所有结点相连因而称之为全连接层。由于其全相连的特性,一般全连接层的参数也是最多的。

  事实上,不同的卷积核提取的特征并不相同,比如猫、狗、鸟都有眼睛,而如果只用局部特征的话不足以确定具体类别,此时就需要使用全连接层组合这些特征来最终确定是哪一个分类,即起到组合特征和分类器功能。

1.2LeNet网络参数

在这里插入图片描述

  • 输入层:输入大小为(28,28)、通道数为1的灰度图像。
  • 卷积层:卷积核尺寸为(6,5,5),即六个5x5大小的卷积核,填充为2,故输出特征图尺寸为(6,28,28)。
  • 池化层:使用平均池化,步幅为2,故输出特征图尺寸为(6,14,14)。
  • 卷积层:卷积核尺寸为(16,6,5,5),即16个6x5x5大小的卷积核,故输出特征图为(16,10,10).
  • 池化层:使用平均池化,步幅为2,输出特征图为(16,5,5)。
  • 全连接层:将所有特征图均展平为一维向量并进行拼接(通过调用nn.Flatten完成,输出为二维矩阵,每一行向量都是一张图片的展平形式),对应120个神经元。
  • 全连接层:将上一全连接层120个神经元映射为84个神经元。
  • 全连接层:将上一全连接层84个神经元映射为10个神经元。

  可知,卷积层往往会使通道数变大,而池化层往往会使特征图尺寸变小。

1.3LeNet5网络总结

在这里插入图片描述

二、AlexNext

在这里插入图片描述

2.1AlexNet网络结构

在这里插入图片描述

  AlexNet与LeNet设计理念相似,但有如下差异:

  • AlexNet比LeNet要深很多。
  • AlexNet由八层组成,包括五个卷积层,两个全连接隐藏层和一个全连接输出层。
  • AlexNet使用ReLUctant而非sigmoid作为激活函数。

2.2AlexNet网络参数

在这里插入图片描述
注意:

  • 图中的数据格式为(H,W,C,N),且最后全连接层的10是因为之后的案例输出为10个分类。
  • 网络参数过多时容易出现过拟合的情况(全连接层存在大量参数 w 、 b w、b wb),使用Dropout随机失活神经元。

2.3Dropout操作

  Dropout用于缓解卷积神经网络CNN过拟合而被提出的一种正则化方法,它确实能够有效缓解过拟合现象的发生,但是Dropout带来的缺点就是可能会减缓模型收敛的速度,因为每次迭代只有一部分参数更新,可能导致梯度下降变慢。
在这里插入图片描述
  其中,神经元的失活仅作用于一轮训练,在下一轮训练时又会随机选择神经元失活。每一轮都会有随机的神经元失活,以此降低缓解过拟合并提高模型训练速度。

2.4PCA图像增强

  图像增强是采用一系列技术去改善图像的视觉效果,或将图像转换成一种更适合于人或机器进行分析和处理的形式。例如采用一系列技术有选择地突出某些感兴趣的信息,同时抑制一些不需要的信息,提高图像的使用价值。
在这里插入图片描述

2.5LRN正则化

在这里插入图片描述

2.6AlexNet总结

在这里插入图片描述

三、实战

3.1LeNet5模型搭建

在这里插入图片描述

import torch
from torch import nn
from torchsummary import summarydevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")class LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()# 手写数字图片大小为32*32,故需填充2个像素self.model = nn.Sequential(nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2, stride=2),nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),nn.AvgPool2d(kernel_size=2, stride=2),nn.Flatten(),nn.Linear(in_features=16 * 5 * 5, out_features=120),nn.Linear(in_features=120, out_features=84),nn.Linear(in_features=84, out_features=10),)def forward(self, x):return self.model(x)myLeNet = LeNet().to(device)
print(summary(myLeNet,input_size=(1, 28, 28)))

在这里插入图片描述

注意,此处在卷积层后使用了sigmoid激活函数,事实上,卷积操作本质仍是一种线性操作,而若只有线性变换,那无论多少层神经元,都能简化层一层神经元,那神经网络只是简单多元线性回归而已,不能拟合更加复杂的函数。此时使用激活函数就可将神经网络非线性化,即提升神经网络的拟合能力,能拟合更复杂的函数。

3.2模型训练

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

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

相关文章

kafka和rabbitmq的区别

1、语言与开发重点 1、Kafka:采用Scala语言开发,主要用于处理活跃的流式数据和大数据量的数据处理。 2、RabbitMQ:由Erlang语言开发,主要用在实时对可靠性要求比较高的消息传递上。 2、结构与交互方式: 1、Kafka&a…

Java中的WebSocket编程详解

Java中的WebSocket编程详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在当今互联网应用中,实时通讯变得越来越重要,而WebSocket作为…

【后端面试题】【中间件】【NoSQL】ElasticSearch面试基本思路和高可用方案(限流、消息队列、协调节点、双集群)

基本思路 业务开发面试Elasticsearch的时候基本问的是基础知识以及倒排索引。 Elasticsearch最基本的可用性保障就是分片,而且是主从分片,所以遇到Elasticsearch如何做到高可用这个问题的时候,首先要提到这一点。 Elasticsearch高可用的核心…

【Android】ViewPage2嵌套Fragment+SeekBar横向滑动冲突

问题描述 ViewPage2嵌套FragmentSeekBar,拖动SeekBar的进度条时,触发ViewPage2的滑动。 解决方案: 方案一:通过事件总线ViewPage2的isUserInputEnabled属性 子Fragment: class SeekBarFragment : Fragment() {priv…

手机屏幕贴合项目(ni视觉如何找矩形的角坐标)

首先,我们存储了cg和dito感兴趣八个角图像的模板,用来匹配位置。 cover指的是cg的四个角模板,lcm是dito四个角匹配模板。 其次,我们采集的8副图像(m_DlgCCDViewArr[2][4])中一定包含匹配模板的特征。 好&…

Json与Java类

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON数据由键值对构成,并以易于阅读的文本形式展现,支持数组、对象、字符串、数字、布尔值…

笔灵AI写作:释放创意,提升写作效率的秘诀

内容为王,在内容创作的世界中尤为重要。然而,面对写作时常常感到无从下手:有时缺乏灵感,有时难以表达清楚自己的想法。AI写作助手的出现,为这些问题提供了创新的解决方案,极大地改变了内容创作的过程。 今…

微调和rag的区别?

微调和RAG(Retrieval-Augmented Generation)在多个维度上存在显著的区别。以下是它们之间的主要差异: 1. **知识维度**: - RAG对知识的更新时间和经济成本更低。它不需要训练,只需要更新数据库即可。 - RAG对知识的掌控…

Pytest+Allure+Yaml+Jenkins+Gitlab接口自动化中Jenkins配置

一、背景 Jenkins(本地宿主机搭建) 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码(可不改,如果运行报allure找不到就直接注释掉) …

C++知识点总结 (02):C++中的语句(简单语句、条件语句、迭代语句、跳转语句、异常处理语句、try语句等)

文章目录 1、简单语句(1)空语句(2)复合语句 2、条件语句3、迭代语句(1)常规for循环(2)范围for循环(3)while和do...while 4、跳转语句(1)break(2)continue(3)goto 5、异常处理语句(1)标准异常(2)throw抛出异常 6、try语句 1、简单语句 (1)空语句 ; (2)复合语句 用花括号括起来的…

Feign远程调用在微服务架构中的实践与应用

Feign远程调用在微服务架构中的实践与应用 随着软件架构的不断演进,微服务架构因其高度解耦、可扩展性强等特性而备受推崇。在微服务架构中,各个服务之间需要频繁地进行远程调用以实现业务功能的整合。而Feign作为一个轻量级的HTTP客户端,以…

nginx添加模块

问题描述:已经在运行的宝塔中的nginx如何添加模块 1. 进入宝塔nginx的脚本目录 cd /www/server/panel/install 2. 读修改宝塔官方写的脚本 vim nginx.sh 3. 找到字符 ./configure - 添加模块 --add-module/home/root/app/nginx-module/echo-nginx-module-0.62 …

Linux笔记之Bash脚本中的EOF

Linux笔记之Bash脚本中的EOF code review! 文章目录 Linux笔记之Bash脚本中的EOF基本用法自定义结束符变量替换禁用变量替换用于脚本嵌入重定向到文件与命令组合总结 在 Bash 脚本中, EOF 通常用于定义一个多行字符串或文档块。这种技术被称为“Here Document”&a…

什么是等级保护2.0?

等保的全称是信息安全等级保护,是《网络安全法》规定的必须强制执行的,保障公民、社会、国家利益的重要工作。 官方定义:等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作,指对国家重要信息、法人和其他组织及公…

git通过命令方式push代码到远程

本地仓库和远程仓库关联操作 通过关联远程分支可以将本地的分支与远程仓库中的分支进行关联,从而实现本地分支与远程分支的同步和交互。 关联远程分支的步骤如下: 1. 首先,使用git remote -v命令查看当前仓库关联的远程仓库。 git remote …

认识100种电路之放大电路

在电子技术的广袤世界中,放大电路犹如一颗璀璨的明珠,发挥着至关重要的作用。那么,为什么电路需要放大?放大的原理又是什么?实现放大又需要用到哪些元器件以及数量如何呢?接着往下看,会解开你的…

intellij idea中使用R语言plot画图无图像问题

1、在intellij idea中使用R语言plot函数时,会遇到各种各样的问题,会出现图片不显示问题, 可以看到,目前我电脑r语言版本为4.2.1,输入下面代码: # # 安装包 # install.packages(ggplot2) # library(ggplot2…

【Lua】第三篇:基本变量类型介绍

文章目录 一. 变量类型介绍二. 基本知识三. 基本类型介绍1. 空类型(nil)2. 数值类型(number)3. 字符串类型(string)4. 布尔类型(boolean) 一. 变量类型介绍 Lua中一共有如下8中变量…

《标》《准》《模》《板》

#include<iostream> #include紈indows.h> #i~鉲uDe<conio.h> #includ?<algorith?> #incduee<cmath> #ifclude<vektor> #include<st$io.h> #iNclude<iostreaM> #include<string> #include<cstring> #include<win…

如何在Java中实现消息推送与通知?

如何在Java中实现消息推送与通知&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Java应用程序中如何实现消息推送与通知的技术…