torch.nn.functional.normalize(input, p=2, dim=1, eps=1e-12, out=None)

其中,p表示范数(这里是2范数),dim表示计算范数的维度(默认为1),eps是为了防止分母为0;
pytorch中的normalize函数本质上就是针对某个维度进行归一化,公式为:
ν=νmax(∣∣ν∣∣p,ϵ)\nu = \frac{\nu}{max(||\nu||_p,\epsilon)}ν=max(∣∣ν∣∣p​,ϵ)ν​

方便记忆,二维矩阵中, dim=1表示在行内进行归一化,dim=0表示在列内进行归一化。
在使用过程中,对dim的理解不够到位,来三个代码实验一下。

示例1:dim=1

a = F.softmax(torch.randn((1, 3, 4)), 1)
b = F.normalize(a)

输出:

// atensor([[[0.2621, 0.2830, 0.3758, 0.0260],[0.3634, 0.3750, 0.5382, 0.1085],[0.3744, 0.3420, 0.0860, 0.8655]]])
// b
b: tensor([[[0.4489, 0.4870, 0.5676, 0.0298],[0.6224, 0.6454, 0.8130, 0.1243],[0.6412, 0.5885, 0.1299, 0.9918]]])

代码中针对维度1进行归一化。维度1有3个通道,具体的计算细节为
0.4489=0.26210.26212+0.36342+0.374420.4489=\frac{0.2621}{\sqrt{0.2621^2+0.3634^2+0.3744^2}}0.4489=0.26212+0.36342+0.37442​0.2621​
0.6224=0.36340.26212+0.36342+0.374420.6224=\frac{0.3634}{\sqrt{0.2621^2+0.3634^2+0.3744^2}}0.6224=0.26212+0.36342+0.37442​0.3634​
0.6421=0.37440.26212+0.36342+0.374420.6421=\frac{0.3744}{\sqrt{0.2621^2+0.3634^2+0.3744^2}}0.6421=0.26212+0.36342+0.37442​0.3744​

示例2:dim=2

a = F.softmax(torch.randn((1, 3, 4)), 1)
c = F.normalize(b, dim=2)
// a
tensor([[[0.0861, 0.1087, 0.0518, 0.3551],[0.8067, 0.4128, 0.0592, 0.2884],[0.1072, 0.4785, 0.8890, 0.3565]]])
// c
tensor([[[0.2237, 0.2825, 0.1347, 0.9230],[0.8467, 0.4332, 0.0621, 0.3027],[0.0997, 0.4447, 0.8262, 0.3313]]])

这里作用的是维度2,可以认为维度2有4个通道,计算细节为:
0.2237=0.08610.08612+0.10872+0.05182+0.355120.2237=\frac{0.0861}{\sqrt{0.0861^2+0.1087^2+0.0518^2+0.3551^2}}0.2237=0.08612+0.10872+0.05182+0.35512​0.0861​
0.2825=0.10870.08612+0.10872+0.05182+0.355120.2825=\frac{0.1087}{\sqrt{0.0861^2+0.1087^2+0.0518^2+0.3551^2}}0.2825=0.08612+0.10872+0.05182+0.35512​0.1087​
0.1347=0.05180.08612+0.10872+0.05182+0.355120.1347=\frac{0.0518}{\sqrt{0.0861^2+0.1087^2+0.0518^2+0.3551^2}}0.1347=0.08612+0.10872+0.05182+0.35512​0.0518​
0.9230=0.35510.08612+0.10872+0.05182+0.355120.9230=\frac{0.3551}{\sqrt{0.0861^2+0.1087^2+0.0518^2+0.3551^2}}0.9230=0.08612+0.10872+0.05182+0.35512​0.3551​

示例3:dim=0

a = F.softmax(torch.randn((1, 3, 4)), 1)
c = F.normalize(b, dim=0)
// a
tensor([[[0.0861, 0.1087, 0.0518, 0.3551],[0.8067, 0.4128, 0.0592, 0.2884],[0.1072, 0.4785, 0.8890, 0.3565]]])
// c
tensor([[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]]])

这里作用的是维度0;维度0上只有1个通道,因此归一化之后全为1,即
1.0=0.08610.086121.0=\frac{0.0861}{\sqrt{0.0861^2}}1.0=0.08612​0.0861​

pytorch中的normalize应用相关推荐

  1. 正则化技巧:标签平滑(Label Smoothing)以及在 PyTorch 中的实现

    来源:DeepHub IMBA 本文约1200字,建议阅读5分钟 在这篇文章中,我们研究了标签平滑,这是一种试图对抗过度拟合和过度自信的技术. 过拟合和概率校准是训练深度学习模型时出现的两个问题.深度 ...

  2. 【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext

    @Author:Runsen 对于PyTorch加载和处理不同类型数据,官方提供了torchvision和torchtext. 之前使用 torchDataLoader类直接加载图像并将其转换为张量. ...

  3. 在pytorch中自定义dataset读取数据2021-1-8学习笔记

    在pytorch中自定义dataset读取数据 utils import os import json import pickle import randomimport matplotlib.pyp ...

  4. 在PyTorch中转换数据

    In continuation of my previous post ,we will keep on deep diving into basic fundamentals of PyTorch. ...

  5. 机器学习花朵图像分类_在PyTorch中使用转移学习进行图像分类

    想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...

  6. 使用PyTorch中的预训练模型进行图像分类

    PyTorch的TorchVision模块中包含多个用于图像分类的预训练模型,TorchVision包由流行的数据集.模型结构和用于计算机视觉的通用图像转换函数组成.一般来讲,如果你进入计算机视觉和使 ...

  7. Pytorch中transforms.Compose()的使用

    torchvision介绍 torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型.torchvision.transforms主要是用于 ...

  8. Pytorch中的DDP

    一. 概览 DDP的原理? 在分类上,DDP属于Data Parallel.简单来讲,就是通过提高batch size来增加并行度. 为什么快? DDP通过Ring-Reduce的数据交换方法提高了通 ...

  9. pytorch 中 混合精度训练(真香)

    一.什么是混合精度训练 在pytorch的tensor中,默认的类型是float32,神经网络训练过程中,网络权重以及其他参数,默认都是float32,即单精度,为了节省内存,部分操作使用float1 ...

  10. pytorch中使用TensorBoard进行可视化Loss及特征图

    pytorch中使用TensorBoard进行可视化Loss及特征图 安装导入TensorBoard 安装TensorBoard pip install tensorboard 导入TensorBoa ...

最新文章

  1. python3字典详解_python3中字典详解
  2. 我的一些小想法(聊以一笑……)
  3. 003 PECompact 2.55
  4. 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)
  5. android listview 去掉水波纹效果_CocosCreator之分层管理的ListView
  6. S3C2440时钟体系
  7. 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络
  8. (82)Verilog HDL:状态机二段式
  9. HibernateUtil类(可用于连接多个数据库)
  10. android stl,Android NDK中的c++ STL
  11. P2P(Peer to Peer)网络的原理
  12. 实战 TPCC-MySQL 基准测试
  13. 知识图谱 - 知识体系构建与知识融合
  14. Anaconda下载与安装详解
  15. 数据结构(python语言描述)第一章
  16. GeoTools入门(八)-- (SLD)样式处理
  17. 《14天从0到1学Java》第一天之04第一行Java代码
  18. 全球最大成人网站公布年度榜单!原来lsp最爱看的是这种片……
  19. 2021年全球与中国椭圆形板簧行业市场规模及发展前景分析
  20. 心理测评软件的心理测试法的优缺点,使用心理测评软件的意义与重要性

热门文章

  1. excel单元格内容拆分_EXCEL拆分单元格中的姓名,这都不叫事儿
  2. python 打印下标和值
  3. C# 实现eval,支持任意个数、任意基本类型的参数
  4. linux命令显示文件内容行号|linux将内容以行号显示出来
  5. 目前常用计算机配置,电脑常见主要配置、参数
  6. 自定义类型:枚举,结构体,联合体
  7. 推荐几款优质 Mac 软件下载网站 - 从此告别软件荒
  8. 国光师傅文件上传靶场练习
  9. ArcGIS读取天地图2.0
  10. l2tp 账户管理系统