热门标签 | 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模拟器,下载地址如 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 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模型。 ... [详细]
  • 本文提供了一系列Python编程基础练习题,涵盖了列表操作、循环结构、字符串处理和元组特性等内容。通过这些练习题,读者可以巩固对Python语言的理解并提升编程技能。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • JavaScript实现表格数据的实时筛选功能
    本文介绍如何使用JavaScript实现对表格数据的实时筛选,帮助开发者提高用户体验。通过简单的代码示例,展示如何根据用户输入的关键字动态过滤表格内容。 ... [详细]
  • 在Oracle数据库中,使用Dbms_Output.Put_Line进行输出调试时,若单行字符超过255个,则会遇到ORA-20000错误。本文介绍了一种有效的方法来处理这种情况,通过创建自定义包和视图,实现对长字符串的分割和正确输出。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
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社区 版权所有