day50 随机函数与广播机制

news2025/6/9 15:26:01

目录

一、随机张量的生成

1.1 torch.randn() 函数

1.2 其他随机函数

1.3 输出维度测试

二、广播机制

2.1 广播机制的规则

2.2 加法的广播机制

二维张量与一维向量相加

三维张量与二维张量相加

二维张量与标量相加

高维张量与低维张量相加

2.3 乘法的广播机制

批量矩阵与单个矩阵相乘

批量矩阵与批量矩阵相乘(部分广播)

三维张量与二维张量相乘(高维广播)


一、随机张量的生成

在深度学习中,我们经常需要随机生成张量,例如用于模型参数的初始化、生成测试数据或模拟输入特征。PyTorch 提供了多种随机张量生成函数,其中 torch.randn() 是最常用的一种。

1.1 torch.randn() 函数

torch.randn() 可以创建一个由标准正态分布(均值为 0,标准差为 1)随机数填充的张量。它的参数如下:

  • size:必选参数,表示输出张量的形状。

  • dtype:可选参数,指定张量的数据类型。

  • device:可选参数,指定张量存储的设备。

  • requires_grad:可选参数,是否需要计算梯度。

以下是生成不同维度张量的示例代码:

import torch

# 生成标量(0维张量)
scalar = torch.randn(())
print(f"标量: {scalar}, 形状: {scalar.shape}")

# 生成向量(1维张量)
vector = torch.randn(5)  # 长度为5的向量
print(f"向量: {vector}, 形状: {vector.shape}")

# 生成矩阵(2维张量)
matrix = torch.randn(3, 4)  # 3行4列的矩阵
print(f"矩阵:{matrix},矩阵形状: {matrix.shape}")

# 生成3维张量(常用于图像数据的通道、高度、宽度)
tensor_3d = torch.randn(3, 224, 224)  # 3通道,高224,宽224
print(f"3维张量形状: {tensor_3d.shape}")

# 生成4维张量(常用于批量图像数据:[batch, channel, height, width])
tensor_4d = torch.randn(2, 3, 224, 224)  # 批量大小为2,3通道,高224,宽224
print(f"4维张量形状: {tensor_4d.shape}")

1.2 其他随机函数

除了 torch.randn(),PyTorch 还提供了其他随机函数,例如:

  • torch.rand():生成在 [0, 1) 范围内均匀分布的随机数。

  • torch.randint():生成指定范围内的随机整数。

  • torch.normal():生成指定均值和标准差的正态分布随机数。

以下是示例代码:

# 生成均匀分布随机数
x = torch.rand(3, 2)  # 生成3x2的张量
print(f"均匀分布随机数: {x}, 形状: {x.shape}")

# 生成随机整数
x = torch.randint(low=0, high=10, size=(3,))  # 生成3个0到9之间的整数
print(f"随机整数: {x}, 形状: {x.shape}")

# 生成正态分布随机数
mean = torch.tensor([0.0, 0.0])
std = torch.tensor([1.0, 2.0])
x = torch.normal(mean, std)  # 生成两个正态分布随机数
print(f"正态分布随机数: {x}, 形状: {x.shape}")

1.3 输出维度测试

在实际的深度学习任务中,我们通常需要计算输入张量经过不同层后的输出维度。以下是卷积层、池化层、线性层等的维度变化示例:

import torch
import torch.nn as nn

# 生成输入张量 (批量大小, 通道数, 高度, 宽度)
input_tensor = torch.randn(1, 3, 32, 32)  # 例如CIFAR-10图像
print(f"输入尺寸: {input_tensor.shape}")

# 卷积层操作
conv1 = nn.Conv2d(
    in_channels=3,        # 输入通道数
    out_channels=16,      # 输出通道数(卷积核数量)
    kernel_size=3,        # 卷积核大小
    stride=1,             # 步长
    padding=1             # 填充
)
conv_output = conv1(input_tensor)  # 由于 padding=1 且 stride=1,空间尺寸保持不变
print(f"卷积后尺寸: {conv_output.shape}")

# 池化层操作 (减小空间尺寸)
pool = nn.MaxPool2d(kernel_size=2, stride=2)  # 创建一个最大池化层
pool_output = pool(conv_output)
print(f"池化后尺寸: {pool_output.shape}")

# 将多维张量展平为向量
flattened = pool_output.view(pool_output.size(0), -1)
print(f"展平后尺寸: {flattened.shape}")

# 线性层操作
fc1 = nn.Linear(
    in_features=4096,     # 输入特征数
    out_features=128      # 输出特征数
)
fc_output = fc1(flattened)
print(f"线性层后尺寸: {fc_output.shape}")

# 再经过一个线性层(例如分类器)
fc2 = nn.Linear(128, 10)  # 假设是10分类问题
final_output = fc2(fc_output)
print(f"最终输出尺寸: {final_output.shape}")

二、广播机制

PyTorch 的广播机制(Broadcasting)是一种强大的张量运算特性,允许在不同形状的张量之间进行算术运算,而无需显式地扩展张量维度或复制数据。这种机制使得代码更简洁高效,尤其在处理多维数据时非常实用。

2.1 广播机制的规则

当对两个形状不同的张量进行运算时,PyTorch 会按以下规则自动处理维度兼容性:

  1. 从右向左比较维度:从张量的最后一个维度(最右侧)开始向前逐维比较。

  2. 维度扩展条件

    • 相等维度:若两个张量在某一维度上大小相同,则继续比较下一维度。

    • 一维扩展:若其中一个张量在某一维度上大小为 1,则该维度会被扩展为另一个张量对应维度的大小。

    • 不兼容错误:若某一维度大小既不相同也不为 1,则抛出 RuntimeError

  3. 维度补全规则:若一个张量的维度少于另一个,则在其左侧补 1 直至维度数匹配。

2.2 加法的广播机制

以下是几个加法广播的例子:

二维张量与一维向量相加
a = torch.tensor([[10], [20], [30]])  # 形状: (3, 1)
b = torch.tensor([1, 2, 3])           # 形状: (3,)
result = a + b

print("原始张量a:")
print(a)

print("\n原始张量b:")
print(b)

print("\n加法结果:")
print(result)
三维张量与二维张量相加
a = torch.tensor([[[1], [2]], [[3], [4]]])  # 形状: (2, 2, 1)
b = torch.tensor([[10, 20]])               # 形状: (1, 2)
result = a + b

print("原始张量a:")
print(a)

print("\n原始张量b:")
print(b)

print("\n加法结果:")
print(result)
二维张量与标量相加
a = torch.tensor([[1, 2], [3, 4]])  # 形状: (2, 2)
b = 10                              # 标量,形状视为 ()
result = a + b

print("原始张量a:")
print(a)

print("\n标量b:")
print(b)

print("\n加法结果:")
print(result)
高维张量与低维张量相加
a = torch.tensor([[[1, 2], [3, 4]]])  # 形状: (1, 2, 2)
b = torch.tensor([[5, 6]])            # 形状: (1, 2)
result = a + b

print("原始张量a:")
print(a)

print("\n原始张量b:")
print(b)

print("\n加法结果:")
print(result)

2.3 乘法的广播机制

矩阵乘法(@)的广播机制除了遵循通用广播规则外,还需要满足矩阵乘法的维度约束:

  • 最后两个维度必须满足:A.shape[-1] == B.shape[-2](即 A 的列数等于 B 的行数)。

  • 其他维度(批量维度):遵循通用广播规则。

以下是几个矩阵乘法广播的例子:

批量矩阵与单个矩阵相乘
A = torch.randn(2, 3, 4)  # 形状: (2, 3, 4)
B = torch.randn(4, 5)     # 形状: (4, 5)
result = A @ B            # 结果形状: (2, 3, 5)

print("A形状:", A.shape)
print("B形状:", B.shape)
print("结果形状:", result.shape)
批量矩阵与批量矩阵相乘(部分广播)
A = torch.randn(3, 2, 4)  # 形状: (3, 2, 4)
B = torch.randn(1, 4, 5)  # 形状: (1, 4, 5)
result = A @ B            # 结果形状: (3, 2, 5)

print("A形状:", A.shape)
print("B形状:", B.shape)
print("结果形状:", result.shape)
三维张量与二维张量相乘(高维广播)
A = torch.randn(2, 3, 4, 5)  # 形状: (2, 3, 4, 5)
B = torch.randn(5, 6)        # 形状: (5, 6)
result = A @ B               # 结果形状: (2, 3, 4, 6)

print("A形状:", A.shape)
print("B形状:", B.shape)
print("结果形状:", result.shape)

@浙大疏锦行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python:Tkinter 开发邮件客户端,能编写邮件,发送邮件带附件

Python Tkinter 邮件客户端 下面是一个使用 Python Tkinter 开发的简单邮件客户端,支持编写邮件和发送邮件功能: 功能说明 这个邮件客户端包含以下功能: 邮件编写功能: 收件人地址输入抄送地址输入邮件主题输入邮件正文编辑区&…

深入解析Java21核心新特性(虚拟线程,分代 ZGC,记录模式模式匹配增强)

文章目录 前言一、虚拟线程 (Virtual Threads - JEP 444) - 并发的革命1.1 解决的核心问题🎯1.2 工作原理与核心机制⚙️1.3 使用详解与最佳实践🛠️1.4 注意事项⚠️1.5 总结 📚 二、分代 ZGC (Generational ZGC - JEP 439) - 低延迟新高度2…

免费批量去水印工具 - 针对文心一言生成图片

免费批量去水印工具 - 针对文心一言生成图片 工具介绍 这是一款免费的批量去水印工具,专门针对文心一言生成的图片进行处理。通过简单的操作,您可以快速去除图片中的水印。 下载链接 您可以通过以下网盘链接下载工具: 链接: https://pa…

在WPS中如何启用宏VBA wps.vba.exe下载和安装

首先我们点击导航栏中的【工具】,点击左侧 运行宏,根据提示 点击 立即加载。加载卡在50%时间比较长,耐心等待。 关闭wps重新打开后, word和xls表格都可以使用了。 如果电脑无法联网,需要提前下载 WPS VBA插件 WPS VB…

Hardware-Efficient Attention for Fast Decoding

TL;DR 2025 年普林斯顿大学提出的硬件友好 attention 设计,在 MQA/GQA 与 deepseek 提出的 MLA 基础之上继续优化,提出 Grouped-Tied Attention (GTA) 和 Grouped Latent Attention (GLA),实现更高推理效率的同时也能保持较好的模型效果。 …

LLMs 系列科普文(13)

十三、AlphaGO 提到强化学习的历史,不得不提到 alphago,如果你不记得这是什么了,那你是否还曾记得,早些年 AI 已经可以在围棋中击败人类选手了。 AlphaGO 系统又 DeepMind 公司开发,你可以在网络上找到当初人机大战的…

element-plus 单选组件 el-radio,选不上,又没报错,直接复制官网也不行解决方案

在使用 Vue 框架开发项目时,Element UI 是常用的组件库。最近在开发中遇到了 Element 单选框组件el-radio的双向绑定问题,直接复制element官网上的的案例下来也是不得,经过调试和探索,终于找到了解决方案,特此记录分享…

idea 启动jar程序并调试

添加一个JAR 应用程序,填写以下内容: JAR路径:填写你要启动的jar程序的绝对路径 虚拟机选项:-Xmx1G -Xms1G -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 程序实参(可选,minecraft专用…

CSS 轮廓(Outline)与边框(Border)的深度解析

在 CSS 中,轮廓(outline)和边框(border)是两个用于装饰元素的重要属性,但它们在功能、渲染机制和应用场景上存在显著差异。下面从多个维度进行详细对比: 一、基础定义与语法差异 边框&#xf…

Docker 部署 Python 的 Flask项目

文章目录 一、构建运行 Docker 容器1. 查找合适镜像2.本地docker 拉取镜像3.项目配置1. python项目下生成 requirements.txt 依赖文件2. 生成Dockerfile文件3.忽略不必要文件4. 构建镜像 4. 运行容器5.测试 二、常见问题与解决方案 一、构建运行 Docker 容器 1. 查找合适镜像 …

Vue入门到实战之第一篇【超基础】

Vue入门到实战之第一篇 学习路线1. Vue 概念1.1 Vue 是什么 2. 创建Vue实例,初始化渲染3. 插值表达式 {{ }}4. Vue响应式特性5. 开发者工具 学习路线 1. Vue 概念 1.1 Vue 是什么 概念: Vue是一个用于 构建用户界面1 的 渐进式2 框架3 1:基…

实时数据分析的技术架构:Lambda vs Kappa架构选择

文章目录 引言:实时数据分析架构的重要性Lambda架构深度解析Kappa架构技术特性架构对比分析维度性能与可扩展性评估技术栈选型指南实际应用场景分析成本效益对比模型混合架构与演进策略企业级决策框架最佳实践与案例研究技术趋势与未来展望引言:实时数据分析架构的重要性 在…

springboot2.x升级springboot3.x

springboot2.x升级springboot3.x 背景升级jdk版本为17以上springboot版本修改javax包更新mybatis-plus升级swagger升级springdocspringdoc配置 背景 当前项目是springboot2.5.9版本的springbootmybatis-plus项目,需要升级到springboot3.5.0项目。 升级jdk版本为17…

Python训练打卡Day43

复习日 1.卷积神经网络的基本概念 2.kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 tips:注册kaggle的注意事项 安装插件:Header Editor 然后打开扩展选项: 输入网址:ht…

227.2018年蓝桥杯国赛 - 交换次数(中等)- 贪心

227. 交换次数(贪心) 1. 2018年蓝桥杯国赛 - 交换次数(中等) 标签:2018 暴力 国赛 1.1 题目描述 IT 产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称 BAT )在某海滩进行招聘活动。…

STM32入门学习之系统时钟配置

1. 时钟就是单片机的心脏。单片机根据时钟频率来控制每个部件的工作,时钟是单片机的脉搏,决定了每条命令运行的速率,没有时钟单片机将停止工作。 如何理解“时钟决定了单片机每条命令运行的速率”? 首先需要去理解单片机中的时…

【ArcGIS Pro微课1000例】0072:如何自动保存编辑内容及保存工程?

文章目录 一、自动保存编辑内容二、自动保存工程在使用ArcGIS或者ArcGIS Pro时,经常会遇到以下报错,无论点击【发送报告】,还是【不发送】,软件都会强制退出,这时如果对所操作没有保存,就会前功尽弃。 此时,自动保存工作就显得尤为重要,接下来讲解两种常见的自动保存方…

AU音频软件|Audition 2025网盘下载与安装教程指南

说起AU,有些小伙伴可能第一印象是化学元素金(Aurum)。实际上,本文要介绍的AU,全称是Adobe Audition,是一款专业音频编辑和混音软件‌,广泛应用于音乐制作、广播、电影及视频声音设计等领域。 目…

网络编程(TCP编程)

思维导图 1.基础流程 流程图中是TCP连接的基础步骤&#xff0c;其他操作都是在此基础上进行添加修改。 2.函数接口 2.1 创建套接字&#xff08;socket&#xff09; int socket(int domain, int type, int protocol); 头文件&#xff1a;#include <sys/types.h> …

热成像实例分割电力设备数据集(3类,838张)

在现代电力系统的运维管理中&#xff0c;红外热成像已经成为检测设备隐患、预防故障的重要手段。相比传统可见光图像&#xff0c;红外图像可揭示设备温度分布&#xff0c;从而更直观地反映过热、老化等问题。而在AI赋能下&#xff0c;通过实例分割技术对热成像中的电力设备进行…