(深度学习快速入门)第三章第三节4:深度学习必备组件之TensorBoard和标准化技术

news2025/2/21 19:49:36

文章目录

  • 一:TensorBoard
    • (1)TensorBoard介绍
    • (2)Pytorch安装TensorBoard
    • (3)TensorBoard使用
    • (4)服务器tensorboard本地显示
    • (5)AutoDL等算力平台tensorboard使用
  • 二:正则化
    • (1)为什么需要Normalization
    • (2)Batch Normalization
    • (3)Layer Normalization
    • (4)Instance Normalization
    • (5)Group Normalization

一:TensorBoard

(1)TensorBoard介绍

TensorBoard:TenosrBoard是Google开发的一个机器学习可视化工具。其主要用于记录机器学习、深度学习训练过程,例如:

  • 记录损失变化、准确率变化
  • 记录图片变化、语音变化、文本变化等,例如在做GAN时,可以过一段时间记录一张生成的图片绘制模型

在这里插入图片描述

(2)Pytorch安装TensorBoard

Pytorch中并没有TensorBoard,它借助的是TensorFlow中的TensorBoard,所以我们最终要安装的是TensorBoardX,安装步骤分为如下两步

conda install tensorboard # 必须先安装tensorboard
conda install tensorboardX

(3)TensorBoard使用

TensorBoard使用:首先需要new一个SummaryWriter对象

from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter(log_dir='runs/mock_accuracy')

当运行完该行代码后,可以看到当前目录下生成了一个runs/mock_accuracy文件夹,并且里面有event日志

在这里插入图片描述

这个writer中可以添加很多内容以供TensorBoard查看,例如图像、文本等。这里我们添加最基本也是最常用的准确率accuracy,因为在验证集上我们要验证模型的准确率。当然你也可以添加训练损失等,但这里我们只以accuracy为例进行演示

进入到你存放日志的文件夹之下,例如上图中的runs,然后输入如下命令

tensorbaord --logdir = ./ 

接着会显示如下信息
在这里插入图片描述

将上面的地址复制到浏览器后,显示如下
在这里插入图片描述

(4)服务器tensorboard本地显示

很多时候我们的训练代码会在服务器上进行训练,这就导致本地无法查看,但其实我们可以将其端口转发至本地查看

如下图,使用XShell,依次点击【文件-属性-连接-SSH-隧道】,然后将源主机改为127.0.0.1即可,侦听端口和目标端口均设置为6006

在这里插入图片描述

服务器上正常运行即可

tensorboard --logdir = ./ # 日志文件夹

在这里插入图片描述

然后在本地浏览器直接地址即可

在这里插入图片描述

(5)AutoDL等算力平台tensorboard使用

很多算力平台其实本身已经把tensorboard给你配置好了,无需自信设置端口转发。这里以AutoDL算力平台为例,介绍一下如何使用

大家可以点击下方链接查看,我感觉这个算力平台价格相当良心,1小时才1.5元,而且认证学生的话会更低,相当划算

  • AutoDL算力云官网

在这里插入图片描述

言归正传,输入如下命令,结束默认的tensorboard进程,然后进入你的日志文件夹再执行命令

ps -ef | grep tensorboard | awk '{print $2}' | xargs kill -9
tensorboard --port 6007 --logdir /path/to/your/tf-logs/direction

然后点击AutoPannel即可查看

在这里插入图片描述

在这里插入图片描述

二:正则化

深度学习=80%数据+20%模型,对于输入数据,我们期望数据要独立同分布

  • 独立:掷色子时,第一次丢的结果不会影响第二次的结果
  • 同分布:第一次丢和第二次丢得到任意一面的概率是相同的

所以数据在输入到网络之前要进行白化,主要目的是

  • 去除特征的相关性,即独立
  • 使特征具有相同的均值和方差

(1)为什么需要Normalization

Normalization主要要解决深度学习中的ICS问题。,它是指深度神经网络会涉及很多层的叠加,每一个的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布就会变得非常距离,因此高层需要不断去重新适应底层的参数更新

  • ICS问题:每一层的输入作为一个分布看待,由于底层的参数随着训练更新,导致相同的输入分布得到的输出分布改变了。而机器学习中有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那么,细化到神经网络的每一层间,每轮训练时分布都是不一致,那么相对的训练效果就得不到保障

Normalization主要有以下类型

  • Batch Normalization(批标准化):适用于大的batchsize,不适用于文本、语音这类变长数据,适用于图像数据
  • Layer Normalization(每层输出上标准化):适用于序列变长数据,RNN/Transformer
  • Instance Normalization(通道上作标准化):适用于GAN等
  • Group Normalization(结合了Layer Normalization和Instance Normalization)

(2)Batch Normalization

方法如下

  • 均值
  • 方差
  • 标准化
  • 利用参数 γ \gamma γ β \beta β进行更新并输出(仿射变换)

在这里插入图片描述

在这里插入图片描述

Batch Normalization的缺点有

  • 对batchsize的大小敏感,如果选择太小的话就不能代表样本的真实分布了,如果太大的话硬件又吃不消
  • Batch Normalization对RNN不友好,因为RNN的深度不是固定的
import torch

# 前一层输出
# 图像数据,NHWC(数量、高、宽、通道数)
output  = torch.rand(size=(8, 224, 224, 16))
batch_normizaliton = torch.nn.BatchNorm2d(num_features=16)  # 输入通道数
# 注意输入维度应该为NCHW,所以要进行维度切换
norm_out = batch_normizaliton(output.permute(0, 3, 1, 2 ))
print(norm_out.shape)

在这里插入图片描述

(3)Layer Normalization

Layer Normlization会针对网络中某一层的所有神经元的输入按以下公式进行标准化

u l = 1 H ∑ i = 1 H α i l u^{l} = \frac{1}{H}\mathop{}\sum_{i=1}^{H}\alpha_{i}^{l} ul=H1i=1Hαil

σ l = 1 H ∑ i = 1 H ( α i l − u l ) 2 \sigma^{l} = \sqrt{ \frac{1}{H} \mathop{}\sum_{i=1}^{H}(\alpha_{i}^{l}-u^{l})^{2} } σl=H1i=1H(αilul)2

layer_normalization = torch.nn.LayerNorm([224, 224, 16])
norm_out2 = layer_normalization(output)
print(norm_out2.shape)

在这里插入图片描述

(4)Instance Normalization

Batch Normalization注重对每个batch进行标准化,保证数据分布一致,但是在某些情形下,如果生成结果主要依赖于单个实例(例如GAN),那么这种这操作显然不合理。所以Instance Normlization会对单个通道进行标准化

y t i j k = x t i j k − u t i σ t i 2 + ϵ y_{tijk} = \frac{x_{tijk}-u_{ti}}{\sqrt{ \sigma_{ti}^{2}+ \epsilon}} ytijk=σti2+ϵ xtijkuti

u t i = 1 H W ∑ i = 1 W ∑ m = 1 H x t i l m u_{ti} = \frac{1}{HW}\mathop{}\sum_{i=1}^{W}\mathop{}\sum_{m=1}^{H}x_{tilm} uti=HW1i=1Wm=1Hxtilm

σ t i 2 = 1 H W ∑ l = 1 W ∑ m = 1 H ( x t i l m − μ u t i ) 2 \sigma_{ti}^{2}=\frac{1}{HW}\mathop{}\sum_{l=1}^{W}\mathop{}\sum_{m=1}^{H}(x_{tilm}-\mu_{uti})^{2} σti2=HW1l=1Wm=1H(xtilmμuti)2

instance_normlization = torch.nn.InstanceNorm2d(16)
# 注意输入维度应该为NCHW,所以要进行维度切换
norm_out3 = instance_normlization(output.permute(0, 3, 1, 2))
print(norm_out3.shape)

在这里插入图片描述

(5)Group Normalization

Group Normlization按通道方向分组,也即输入变为[N, H, group_number, C//group_number]极端情况下

  • group_numer=1时,GN就是LN
  • group_numer=通道数目时,GN就是IN
group_normlization = torch.nn.GroupNorm(num_groups=4, num_channels=16)
norm_out4 = group_normlization(output.permute(0, 3, 1, 2))
print(norm_out4.shape)

在这里插入图片描述

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

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

相关文章

07技术太卷我学APEX-动态菜单+URL传参数给页面

07技术太卷我学APEX-动态菜单URL传参数给页面 0 应用场景 《技术太卷我学APEX》收集的项目越来越多,我想把【类】【子类】加到导航菜单栏,点击不同的分类菜单栏,对列表进行过滤,也可以全部浏览,如下图: …

JAVA SE复习(第1章 Java概述)

本文笔记来自硅谷柴林燕老师的笔记 只为自己看笔记方便使用 不做他用 目录 第1章 Java概述 1.1 Java语言发展历史(记关键点) 1.2 Java语言特点(后面需要关注和体会) 1.3 Java语言跨平台原理(理解) 1…

4. 网络编程之TCP编程

1. 《计算机网络编程》 我们接触网络编程,肯定是要对网络编程的一些专业术语及基本理论知识是要有所认知的。python网络编程无非是在这些基础理论知识之上给我们提供了一些方便实用的网络库来供我们使用。尽管做了非常底层的封装,并且给我们暴露了上层的…

java IO流之缓冲流详解

缓冲流概述 缓冲流也称为高效流或者高级流。之前我们学习的字节流、字符流可以成为基本流。 作用:缓冲流自带缓冲区、可以提高基本字节流、字符流读写数据的性能。 分类: BufferedInputStream -->字节缓冲输入流 BufferedOutputStream–>字节缓冲输…

ch1_1计算机系统概论

1. 内容安排 1.1 概论 1.2 计算机系统的硬件结构 存储器,I/O 输入与输出;系统总线;CPU 1.3 第三篇 CPU 中央处理器中,所包含的内容: ALU, CUCPU 内部互连寄存器 1.4 CU CU : control uni…

最新虚幻5引擎(UE5)游戏性能的影响详解

Unreal Engine 5 是由 Unreal Engine 公司开发的一款游戏引擎。5 代表引擎的主要版本号。它专为创建多人在线游戏、手机游戏、高端游戏和虚幻应用程序而设计。从图中可以看出,随着场景复杂度的增加,UE5的内存占用会逐渐增加。当然,这并不意味…

Redis简介、数据类型和命令

1 Redis 简介Redis 是一个高性能的 key/value 数据库。它是完全开源免费的,并且遵守 BSD 协议。1.1 Redis 特点不仅支持 key/value 类型的数据,也支持 list,hash,set,zset 等等数据结构。支持持久化,可以把内存数据保存到磁盘上,重…

高并发异步多线程处理例子

用户请求流程 问题点 tomcat 线程资源占满,由于tomcat线程资源有限,每个请求都会经由tomcat线程处理,阻塞至web层处理完才能回收再利用。web层分发至后端服务可能会扩大几倍甚至数百倍的,譬如用户发起请求1w/s,到后端…

JavaEE10-Spring Boot配置文件

目录 1.配置文件作用 2.配置文件的格式 为配置文件安装提示插件 2.1. .properties(旧版,默认的) 2.1.1.基本语法 PS:配置文件中使用"#"来添加注释信息,2种添加方式: 2.1.2.缺点分析 2.2. .yml&#…

阿里“云开发“小程序(uniCloud)

博主ps: 网上资料少的可怜,哎,腾讯云涨价了,论服务器,我肯定选的阿里,再着你们对比下uniCloud的报价就知道了,如果有钱就另当别论了。 所以这片博文,博主试过之后,先抛出…

Git速成指南

文章目录版本管理工具概念版本管理工具介绍版本管理发展简史SVN(SubVersion)GitGit工作流程图Git安装基本配置为常用指令配置别名(可选)解决GitBash乱码问题Git常用命令获取本地仓库基础操作指令查看修改的状态(status)添加工作区…

[翻译]PostgreSQL中的WAL压缩以及版本15中的改进

[翻译]PostgreSQL中的WAL压缩以及版本15中的改进从以开始就一直在尝试对WAL进行不同级别的压缩。自2016年以来内置功能(wal_compression)就一直存在,几乎所有备份工具都会在传递到备机前对WAL进行压缩。但现在是时候再看看内置的wal_compress…

呦~,这不 SVG 映射反爬么,这你都会?厉害厉害 | 案例 25

在正式学习本篇博客前,先要了解一下什么是 SVG(Scalable Vector Graphics),它是一种矢量图形格式,可以用来在网页上创建可伸缩的图形。 使用 SVG 技术实现反爬虫的方法有以下几种: 验证码:使用…

imx6ull Linux使用设备树配置LED

我们基于寄存器的方式已经编写了LED驱动,实现点亮/熄灭LED,但是你有没有发现一个问题,就是假设LED修改了一个GPIO,那么需要对应的修改寄存器代码,非常繁琐,而且随着改板次数增加,那么会带来一个…

从零开始的数模(五)插值与拟合

目录 一、概念 二、 插值 2.1方法 2.2MATLAB实现 例题1 ​编辑例题2 2.3python实现 2.3.1例题一的python解法 2.3.2二维网格节点插值 例题四 三、拟合篇: 3.1MATLAB实现 3.2python实现 一、概念 二、 插值 2.1方法 2.2MATLAB实现 在MATLAB中提供了一些…

带滤波器的PID控制仿真-2(M语言)

被控对象为三阶传递函数:低通滤波器为:采样时间为1ms,噪声信号加在对象的输出端。分三种情况进行:M1 时,为未加噪声信号;M2时,为加噪声信号未加滤波;M3时,为加噪声信号加滤波。阶跃响应结果如图1&#xff5…

【论文精读】KD-MVS

今天读的是发表在ECCV2022上的自监督MVS文章,作者来自于旷视科技和清华大学。 文章链接:arxiv 代码链接:https://github.com/megvii-research/KD-MVS 目录Abstract1. Introduction2. Related work3. Methodology3.1 Self-supervised Teacher …

51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)

51单片机七人多数表决器仿真设计( proteus仿真程序报告讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0033 51单片机七人多数表决器仿真设计视频讲解1.主要功能:2.仿真3.…

Java:Mybatis的使用

一、Mybatis的概述 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。 MyBatis中文官网:https://mybatis.org/mybatis-3/zh/getting-started.html 二、Mybatis快速入门 1、创建user表,添加数据 create database mybatis; use mybati…

英语语法大全

文章目录一、主语1、名词、代词和动词做主语2、主语从句做主语,谓语动词用单数3、主语从句练习二、谓语动词1、谓语动词种类2、主谓一致三、宾语1、单宾语2、双宾语3、复合宾语4、宾语从句四、定语1、定语从句2、定语从句的翻译五、状语1、分词做状语2、独立主格结构…