热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解PyTorch的multinomial函数

本文详细解析了PyTorch中的torch.multinomial函数,包括其参数、功能及使用示例。该函数用于从输入张量中按权重进行采样,并返回采样的索引。

torch.multinomial(input, num_samples, replacement=False, out=None) 是 PyTorch 中的一个重要函数,用于从输入张量中按权重进行采样,并返回采样的索引。

该函数的主要参数如下:

  • input: 输入张量,表示每个元素的权重。
  • num_samples: 每一行的采样次数。
  • replacement: 是否允许有放回的采样,默认为 False(无放回)。
  • out: 可选参数,用于指定输出张量。

输入张量可以被视为一个权重矩阵,其中每个元素表示其在该行中的权重。如果某个元素的权重为 0,则在其他非零元素未被完全采样之前,该元素不会被选中。

num_samples 参数指定了每行的采样次数,该值不能超过每行的元素数量,否则会引发错误。

replacement 参数决定了采样方式是有放回还是无放回。如果设置为 True,则表示有放回采样;如果设置为 False,则表示无放回采样。

以下是一些官方示例:

>>> weights = torch.tensor([0, 10, 3, 0]) # 创建一个权重张量
>>> torch.multinomial(weights, 4)
tensor([1, 2, 1, 2])
>>> torch.multinomial(weights, 4, replacement=True)
tensor([1, 2, 1, 2])

在上述例子中,输入张量为 [0, 10, 3, 0],表示第 0 和第 3 个元素的权重为 0。因此,在其他非零元素未被完全采样之前,这些权重为 0 的元素不会被选中。

对于无放回采样(replacement=False),第一次调用 torch.multinomial(weights, 4) 时,可能的结果只有两种:[1, 2, 0, 0] 和 [2, 1, 0, 0],其中 [1, 2, 0, 0] 更常见,因为第 1 个元素的权重较大,被选中的概率更高。当第 1 和第 2 个元素被采样完后,剩下的两个权重为 0 的元素才会被选中。

对于有放回采样(replacement=True),第二次调用 torch.multinomial(weights, 4, replacement=True) 时,只会出现 1 和 2 这两个元素,因为有放回采样不会选中权重为 0 的元素。

如果输入的是二维张量,则返回的也是一个二维张量,其行数与输入张量的行数相同,列数为 num_samples,即每一行都会进行 num_samples 次采样,采样方式与一维张量相同。

参考链接:
https://blog.csdn.net/monchin/article/details/79787621


推荐阅读
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 在Oracle数据库中,使用Dbms_Output.Put_Line进行输出调试时,若单行字符超过255个,则会遇到ORA-20000错误。本文介绍了一种有效的方法来处理这种情况,通过创建自定义包和视图,实现对长字符串的分割和正确输出。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • LeetCode 540:有序数组中的唯一元素
    来源:力扣(LeetCode),链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array。题目要求在仅包含整数的有序数组中,找到唯一出现一次的元素,并确保算法的时间复杂度为 O(log n) 和空间复杂度为 O(1)。 ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
author-avatar
话说的爱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有