PyTorch 中的距离函数深度解析:掌握向量间的距离和相似度计算

目录

Pytorch中Distance functions详解

pairwise_distance

用途

用法

参数

数学理论公式

示例代码

cosine_similarity

用途

用法

参数

数学理论

示例代码 

输出结果

pdist

用途

用法

参数

数学理论

示例代码

总结 


Pytorch中Distance functions详解

pairwise_distance

torch.nn.functional.pairwise_distance 是 PyTorch 中的一个函数,用于计算两组向量之间的成对距离。这个函数广泛应用于机器学习和深度学习中,尤其是在处理距离相关的任务,如聚类、相似度计算等。

用途

  • 计算两组向量间的成对距离,常用于度量向量间的相似性或差异性。
  • 用于机器学习中的距离度量,如k-最近邻 (k-NN)、聚类等。

用法

torch.nn.functional.pairwise_distance(x1, x2, p=2.0, eps=1e-6, keepdim=False)

 

  • x1, x2: 输入的两组向量,必须有相同的维度。
  • p: 距离计算的幂指数,默认为2,即欧几里得距离。
  • eps: 一个小的数值,用于保证数值稳定性。
  • keepdim: 是否保持输出的维度。

参数

  • x1: 第一组向量的张量。
  • x2: 第二组向量的张量。
  • p: 距离度量的幂指数,默认为2(欧几里得距离)。
  • eps: 避免除零错误的小数,默认为1e-6。
  • keepdim: 在输出中保持原始输入的维度结构。

数学理论公式

对于向量 x1_{i}​ 和 x2_{i}pairwise_distance 计算的是 p 范数下的距离:

d(x1_{i},x2_{i})=(\sum_{j}|x1_{ij}-x2_{ij}|^{p}+eps)^{\frac{1}{p}}

 其中,x1_{ij} 和 x2_{ij} 分别是x1_{i}x1_{i}x2_{i} ,的第j个元素。

示例代码

import torch
import torch.nn.functional as F# 定义两个向量组
x1 = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float32)
x2 = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float32)# 计算成对距离
dist = F.pairwise_distance(x1, x2, p=2)# 输出结果  tensor([2.2361, 2.4495]) 这里,输出的是每一对向量之间的欧几里得距离。print(dist)

cosine_similarity

torch.nn.functional.cosine_similarity 是 PyTorch 中的一个函数,用于计算两个张量之间的余弦相似度。这个函数在机器学习和深度学习领域中非常有用,尤其是在处理文本、图像或任何类型的特征向量时,用于度量它们之间的相似性。

用途

  • 计算两个向量或向量组之间的余弦相似度。
  • 广泛应用于自然语言处理、计算机视觉、推荐系统等领域。

用法

torch.nn.functional.cosine_similarity(x1, x2, dim=1, eps=1e-8)
  • x1, x2: 输入的两个张量,必须能够广播到相同的形状。
  • dim: 计算相似度的维度。
  • eps: 避免除零错误的小数值。

参数

  • x1 (Tensor): 第一个输入张量。
  • x2 (Tensor): 第二个输入张量。
  • dim (int, 可选): 计算相似度的维度,默认为1。
  • eps (float, 可选): 用于避免除零的小数值,默认为1e-8。

数学理论

余弦相似度的计算公式为:

similarity = \frac{x1}{max(||x1||_{2},\varepsilon )\times max(||x2||_{2},\varepsilon )}

 

  • x1⋅x2 表示两个张量的点积。
  • ||x1||_{2} 和 ||x2||_{2}​ 分别是 x1 和 x2 的2范数。
  • ε 是一个小的数值,用来保证除数不为零。

示例代码 

import torch
import torch.nn.functional as F# 随机生成两个张量
input1 = torch.randn(100, 128)
input2 = torch.randn(100, 128)# 计算余弦相似度
output = F.cosine_similarity(input1, input2)# 打印结果
print(output)

输出结果

此代码将计算 input1input2 每行之间的余弦相似度,并输出一个长度为100的张量,每个元素对应于两个输入张量相应行的余弦相似度值。由于输入是随机生成的,输出也会随机变化。

pdist

torch.nn.functional.pdist 是 PyTorch 中的一个函数,它用于计算输入张量中每对行向量之间的 p 范数距离。此函数在统计分析、机器学习和数据科学中非常有用,尤其是在涉及距离度量和空间关系的场景中。

用途

  • 计算给定张量中每对行向量之间的距离。
  • 应用于聚类分析、多维缩放和其他需要距离度量的算法。

用法

torch.nn.functional.pdist(input, p=2)
  • input: 输入张量,其形状为 N×M,其中 N 是行数,M 是列数(特征数)。
  • p: 用于计算的 p 范数,默认为 2,即欧几里得距离。

参数

  • input (Tensor): 形状为 N×M 的输入张量。
  • p (float): p 范数的值,用于计算向量对之间的距离。可取值为 0 到 ∞ 之间的任何实数。

数学理论

对于输入张量的每一对行向量 x_{i}x_{j}pdist 计算它们之间的 p 范数距离:​d(x_{i},x_{j})=(\sum_{k}|x_{ik}-x_{jk}|^{p})^{\frac{1}{p}} 其中,x_{ik}​ 和 x_{jk} 分别是 x_{i} 和x_{j}的第 k 个元素。

示例代码

import torch
import torch.nn.functional as F# 定义输入张量
input_tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=torch.float32)# 计算 p 范数距离
distances = F.pdist(input_tensor, p=2)# 输出结果 tensor([5.1962, 10.3923, 5.1962]) 这里,输出的是输入张量中每一对行向量之间的欧几里得距离。print(distances)

总结 

本文解析了 PyTorch 中三个关键的距离函数:pairwise_distancecosine_similaritypdist。这些函数在深度学习和机器学习中非常重要,用于计算向量之间的距离和相似度,从而支持各种算法如聚类、k-最近邻、特征相似度度量等。每个函数都有其特定的应用场景和数学原理。pairwise_distance 计算两组向量间的成对欧几里得距离,cosine_similarity 计算两个张量间的余弦相似度,而 pdist 则计算一个张量内各行向量间的 p 范数距离。通过这些函数,我们能有效地分析和处理数据,特别是在高维空间中。

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

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

相关文章

Filter过滤器、使用场景、使用办法、创建和配置等

这里写目录标题 过滤器应用场景自动登录统一设置编码格式访问权限控制敏感字符过滤 Filter使用Filter的创建和配置 过滤器 过滤器实际上就是对 web资源进行拦截,做一些处理后再交给下一个过滤器或 servlet处理通常都是用来拦截request进行处理的,也可以…

JVM:性能监控工具分析和线上问题排查实践

前言 在日常开发过程中,多少都会碰到一些jvm相关的问题,比如:内存溢出、内存泄漏、cpu利用率飙升到100%、线程死锁、应用异常宕机等。 在这个日益内卷的环境,如何运用好工具分析jvm问题,成为每个java攻城狮必备的技能…

Docker(二)安装指南:主要介绍 Docker 在 Linux 、Windows 10 和 macOS 上的安装

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南,这里主要介绍 Docker 在…

物联网网关与plc怎么连接?

物联网网关与plc怎么连接? 物联网是当今社会中最热门的技术之一,而物联网网关则是连接物联网设备与云平台的核心设备之一。物联网网关在连接各种传感器和设备时起着至关重要的作用。而另一种广泛应用于工业控制和自动化领域的设备是可编程逻辑控制器&…

沃尔玛、亚马逊、美客多新手快速出单,如何通过自养号测评提升销量和评价?

对于亚马逊新手卖家而言,如何以最快的速度出单无疑是最关心的,今天给大家分享对接一些卖家的经验。 一、店铺里需要有引流款商品 新手店铺没有出单主要的原因是没有流量,卖家不知道如何将潜在客户吸引进店。个人认为,想做引流&a…

vue3前端开发,生命周期函数的基础练习

vue3前端开发,生命周期函数的基础练习! 下面先给大家看一个图片,帮助大家了解,vue3的生命周期函数,和旧版本vue2的生命周期函数,有什么变化。 如图所示,vue3里面,把前面2个函数,混在…

Spring Boot整合MyBatis-Plus

引言 在现代软件开发中,我们经常需要处理大量的数据。为了有效地管理这些数据,我们需要使用一些强大的框架。其中,Spring Boot和MyBatis-Plus是两个非常流行的框架。Spring Boot是一个基于Spring的开源Java框架,可以用于创建独立…

Spring Boot整合Druid(druid 和 druid-spring-boot-starter)

引言 在现代的Web应用开发中,高性能的数据库连接池是确保应用稳定性和响应性的关键因素之一。Druid是一个开源的高性能数据库连接池,具有强大的监控和统计功能,能够在Spring Boot应用中提供出色的数据库连接管理。本文将研究在Spring Boot中…

day14 JavaScript基础知识1

目录 简介功能:JS语言组成特点变量命名规则基础数据类型(6)引用数据类型(3)定时器 简介 js是一种轻量级,解释型或即是编译型的编程语言。JavaScript基于原型编程,多范式的动态脚本语言,并且支持面向对象、…

三大3D引擎对比,直观感受AMRT3D渲染能力

作为当前热门的内容呈现形式,3D已经成为了广大开发者、设计师工作里不可或缺的一部分。 用户对于3D的热衷,源于其带来的【沉浸式体验】和【超仿真视觉效果】。借此我们从用户重点关注的四个3D视觉呈现内容: 材质- 呈现多元化内容水效果- 展…

美易官方《盘前:道指期货跌0.1%,美股大幅下跌窗口已打开?》

盘前:道指期货跌0.1% 美股大幅下跌窗口已打开? 随着全球股市的波动加剧,投资者对于美股市场的担忧也在逐渐升温。尤其是在近期,道指期货的微小跌幅,引发了市场对于美股大幅下跌的担忧。那么,美股大幅下跌的…

GPT应用程序的类型

GPT(Generative Pre-trained Transformer)应用程序在各个行业都有广泛的应用潜力,其自然语言生成的能力使其适用于多种场景。以下是一些行业中常见的GPT应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件…