pytorch中的normalize应用
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.374420.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.374420.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.374420.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.355120.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.355120.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.355120.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.355120.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.086120.0861
pytorch中的normalize应用相关推荐
- 正则化技巧:标签平滑(Label Smoothing)以及在 PyTorch 中的实现
来源:DeepHub IMBA 本文约1200字,建议阅读5分钟 在这篇文章中,我们研究了标签平滑,这是一种试图对抗过度拟合和过度自信的技术. 过拟合和概率校准是训练深度学习模型时出现的两个问题.深度 ...
- 【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext
@Author:Runsen 对于PyTorch加载和处理不同类型数据,官方提供了torchvision和torchtext. 之前使用 torchDataLoader类直接加载图像并将其转换为张量. ...
- 在pytorch中自定义dataset读取数据2021-1-8学习笔记
在pytorch中自定义dataset读取数据 utils import os import json import pickle import randomimport matplotlib.pyp ...
- 在PyTorch中转换数据
In continuation of my previous post ,we will keep on deep diving into basic fundamentals of PyTorch. ...
- 机器学习花朵图像分类_在PyTorch中使用转移学习进行图像分类
想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...
- 使用PyTorch中的预训练模型进行图像分类
PyTorch的TorchVision模块中包含多个用于图像分类的预训练模型,TorchVision包由流行的数据集.模型结构和用于计算机视觉的通用图像转换函数组成.一般来讲,如果你进入计算机视觉和使 ...
- Pytorch中transforms.Compose()的使用
torchvision介绍 torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型.torchvision.transforms主要是用于 ...
- Pytorch中的DDP
一. 概览 DDP的原理? 在分类上,DDP属于Data Parallel.简单来讲,就是通过提高batch size来增加并行度. 为什么快? DDP通过Ring-Reduce的数据交换方法提高了通 ...
- pytorch 中 混合精度训练(真香)
一.什么是混合精度训练 在pytorch的tensor中,默认的类型是float32,神经网络训练过程中,网络权重以及其他参数,默认都是float32,即单精度,为了节省内存,部分操作使用float1 ...
- pytorch中使用TensorBoard进行可视化Loss及特征图
pytorch中使用TensorBoard进行可视化Loss及特征图 安装导入TensorBoard 安装TensorBoard pip install tensorboard 导入TensorBoa ...
最新文章
- python3字典详解_python3中字典详解
- 我的一些小想法(聊以一笑……)
- 003 PECompact 2.55
- 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)
- android listview 去掉水波纹效果_CocosCreator之分层管理的ListView
- S3C2440时钟体系
- 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络
- (82)Verilog HDL:状态机二段式
- HibernateUtil类(可用于连接多个数据库)
- android stl,Android NDK中的c++ STL
- P2P(Peer to Peer)网络的原理
- 实战 TPCC-MySQL 基准测试
- 知识图谱 - 知识体系构建与知识融合
- Anaconda下载与安装详解
- 数据结构(python语言描述)第一章
- GeoTools入门(八)-- (SLD)样式处理
- 《14天从0到1学Java》第一天之04第一行Java代码
- 全球最大成人网站公布年度榜单!原来lsp最爱看的是这种片……
- 2021年全球与中国椭圆形板簧行业市场规模及发展前景分析
- 心理测评软件的心理测试法的优缺点,使用心理测评软件的意义与重要性