PyTorch——从入门到精通:PyTorch基础知识(normal 函数)【PyTorch系统学习】

news/2024/11/24 11:14:50/

torch.normal() 的用法

        该函数的参数如下:

normal(mean, std, *, generator=None, out=None)

        参数说明

  1. mean:

    • 均值,可以是一个数值(标量)或者张量。
    • 如果是张量,则指定生成正态分布的均值,形状需与标准差匹配
  2. std:

    • 标准差,可以是一个数值(标量)或者张量。
    • 如果是张量,则指定生成正态分布的标准差,形状需与均值匹配
  3. generator (可选): 用于生成随机数的随机数生成器。

  4. out (可选): 如果提供,则结果存储在这个张量中。

        返回值

        返回一个与 meanstd 的形状匹配的张量,值是符合指定正态分布的随机数。

        函数使用示例

        生成一个标量值

import torch
# 生成均值为0,标准差为1的正态分布随机数
result = torch.normal(0, 1)
print(result)

        生成一个张量

import torch
# 生成均值为0,标准差为1的3x3张量
result = torch.normal(0, 1, size=(3, 3))
print(result)

        不同均值和标准差的张量

import torch
# 均值和标准差为张量
mean = torch.tensor([0.0, 1.0, 2.0])
std = torch.tensor([1.0, 0.5, 0.25])
result = torch.normal(mean, std)
print(result)

        高维张量的均值和标准差

        当函数的作用对象拓展到高维张量时,相信还有很多小伙伴不太理解,torch.normal()函数中的均值和标准差是如何体现和作用的,接下来就针对于不同情况来细致的讲解一下:

        情况一:当 meanstd 是标量时,生成的矩阵中所有元素都使用同一个均值和标准差。

import torch# 生成一个 3x3 的矩阵,每个元素均值为 0,标准差为 1
matrix = torch.normal(0, 1, size=(3, 3))
print(matrix)

        例如,在上述的代码中,虽然我们生成的是一个3✖3的矩阵,但由于我们的均值和标准差都是标量,因此每个元素都是从均值为 0、标准差为 1 的正态分布中独立采样。

        情况二:当 meanstd 是张量时,生成的矩阵中每个位置的元素使用对应位置的均值和标准差。

import torch# 均值和标准差为矩阵
mean = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
std = torch.tensor([[0.1, 0.2], [0.3, 0.4]])# 生成矩阵
matrix = torch.normal(mean, std)
print(matrix)

        这个时候,对于生成的矩阵matrix:

  • matrix[0,0] 从 N( 1.0, 0.1^2) 中采样。
  • matrix[0,1] 从 N( 2.0, 0.2^2) 中采样。
  • matrix[1,0] 从 N( 3.0, 0.3^2) 中采样。
  • matrix[1,1] 从 N( 4.0, 0.4^2) 中采样。

        这也是为什么在参数说明中强调均值和标准差的形状需要相互匹配,并且返回值的形状在默认情况下会与 meanstd 的形状一致,在这道题中的形状即为(2,2)。

        情况三:如果 meanstd 的形状不同,但满足广播规则,PyTorch 会自动扩展较小的张量以匹配较大的张量。广播机制的介绍曾在先前的博客(PyTorch基础知识(张量))中有所涉及。

import torchmean = torch.tensor([1.0, 2.0])  # 1D 张量,形状为 (2,)
std = torch.tensor([[0.1], [0.2]])  # 2D 张量,形状为 (2, 1)# 广播机制
matrix = torch.normal(mean, std)
print(matrix)

广播过程

  1. mean 的形状扩展为 (2, 2),则拓展后的均值为[[1, 2],[1,2]]。
  2. std 的形状扩展为 (2, 2),则拓展后的标准差为[[ 0.1, 0.1 ], [ 0.2, 0.2]]

结果

  • matrix[0,0]  从 N(1.0,0.1^2) 中采样。
  • matrix[0,1]  从 N(2.0,0.1^2) 中采样。
  • matrix[1,0]  从 N(1.0,0.2^2) 中采样。
  • matrix[1,1]  从 N(2.0,0.2^2) 中采样。

感谢阅读,希望对你有所帮助~


http://www.ppmy.cn/news/1549523.html

相关文章

Wireshark抓取HTTPS流量技巧

一、工具准备 首先安装wireshark工具,官方链接:Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成,用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件(例如包含密钥的…

鸿蒙操作系统(HarmonyOS)开发的初学者了解和入门

1. 什么是鸿蒙操作系统(HarmonyOS) 鸿蒙操作系统是华为开发的一种分布式操作系统,面向多种设备(如智能手机、智能家居设备、穿戴设备、车机等)。它的特点包括: 分布式架构:支持跨设备无缝协作…

Tortoise ORM

官方文档:Tortoise ORM - Tortoise ORM v0.22.0 Documentation 简介 Tortoise ORM:异步,API和Django ORM 大多类似集成Pydantic;多用于asgi starlette / sanic / FastAPI...Sqlalchemy:支持异步,Flask / …

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

Python编程技巧:多变量赋值的优雅艺术

在Python编程的世界里,有许多令人惊叹的语法特性,而多变量赋值就像是一颗闪耀的明珠,它不仅让代码更优雅,还能提升程序的执行效率。今天我们就深入探讨这个看似简单却蕴含深意的编程技巧。 基础认识 传统的变量赋值方式&#xff…

利用爬虫爬取网页小说

需求分析 安装requests包 pip install requests目录采集地址: h t t p s : / / w w w . 3 b q g . c c / b o o k / 60417 / https://www.3bqg.cc/book/60417/ https://www.3bqg.cc/book/60417/ 章节采集地址: h t t p s : / / w w w . 3 b q g . c …

Redis进阶Redission实现分布式锁

Redis进阶Redission实现分布式锁 基于Redis实现的各种问题怎么解决这些问题redisson实现1、导入依赖2.注册成Bean3、代码实现 基于Redis实现的各种问题 基于Redis实现的分布式锁还具有其他问题 不可重入:按照以上的逻辑,我们一个线程只能获取一次锁&am…

第二十九章 TCP 客户端 服务器通信 - 记录的拼接

文章目录 第二十九章 TCP 客户端 服务器通信 - 记录的拼接记录的拼接多路复用 TCP设备正在关闭连接使用CLOSE命令断开连接 第二十九章 TCP 客户端 服务器通信 - 记录的拼接 记录的拼接 在某些情况下,TCP会将不同的记录连接在一起形成单个记录。如果客户端或服务器…