当前位置: 首页 > news >正文

仕德伟做的网站图片怎么修表白网站制作器

仕德伟做的网站图片怎么修,表白网站制作器,如何自己做购物网站,顶呱呱做网站吗随机函数与广播机制 知识点回顾 1.随机张量的生成:torch.randn 函数 2.卷积和池化的计算公式 3.pytorch 的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机制,基本一致 随机张量的生成 在完成一些任务时需要生成一些张量,比如权…

随机函数与广播机制

知识点回顾

1.随机张量的生成:torch.randn 函数

2.卷积和池化的计算公式

3.pytorch 的广播机制:加法和乘法的广播机制

ps:numpy运算也有类似的广播机制,基本一致

随机张量的生成

在完成一些任务时需要生成一些张量,比如权重的初始化,或者计算输入纬度经过模块后输出的维度,都可以用一个随机函数来实现需要的张量格式。本文重点介绍torch.randn函数

torch.randn函数

在 PyTorch 中,torch.randn()是一个常用的随机张量生成函数,它可以创建一个由标准正态分布(均值为 0,标准差为 1)随机数填充的张量。这种随机张量在深度学习中非常实用,常用于初始化模型参数、生成测试数据或模拟输入特征。

torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

- size:必选参数,表示输出张量的形状(如(3, 4)表示 3 行 4 列的矩阵)。

- dtype:可选参数,指定张量的数据类型(如torch.float32、torch.int64等)。

- device:可选参数,指定张量存储的设备(如'cpu'或'cuda')。

- 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}")  # 输出: torch.Size([3, 224, 224]) # 生成4维张量(常用于批量图像数据:[batch, channel, height, width])
tensor_4d = torch.randn(2, 3, 224, 224)  # 批量大小为2,3通道,高224,宽224
print(f"4维张量形状: {tensor_4d.shape}")  # 输出: torch.Size([2, 3, 224, 224])
输出维度测试
import torch
import torch.nn as nn# 生成输入张量 (批量大小, 通道数, 高度, 宽度)
input_tensor = torch.randn(1, 3, 32, 32)  # 例如CIFAR-10图像
print(f"输入尺寸: {input_tensor.shape}")  # 输出: [1, 3, 32, 32]
# 1. 卷积层操作
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}")  # 输出: [1, 16, 32, 32]# 2. 池化层操作 (减小空间尺寸)
pool = nn.MaxPool2d(kernel_size=2, stride=2) # 创建一个最大池化层
pool_output = pool(conv_output)
print(f"池化后尺寸: {pool_output.shape}")  # 输出: [1, 16, 16, 16]# 3. 将多维张量展平为向量
flattened = pool_output.view(pool_output.size(0), -1)
print(f"展平后尺寸: {flattened.shape}")  # 输出: [1, 4096] (16*16*16=4096)# 4. 线性层操作
fc1 = nn.Linear(in_features=4096,     # 输入特征数out_features=128      # 输出特征数
)
fc_output = fc1(flattened)
print(f"线性层后尺寸: {fc_output.shape}")  # 输出: [1, 128]# 5. 再经过一个线性层(例如分类器)
fc2 = nn.Linear(128, 10)  # 假设是10分类问题
final_output = fc2(fc_output)
print(f"最终输出尺寸: {final_output.shape}")  # 输出: [1, 10]
print(final_output)

广播机制

PyTorch 的广播机制(Broadcasting)是一种高效的张量运算特性,允许在不同形状的张量之间执行元素级操作(如加法、乘法),而无需显式扩展或复制数据。这种机制通过自动调整张量维度来实现形状兼容,使代码更简洁、计算更高效。

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

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

  2. 维度扩展条件

    • 相同维度:若两个张量在某一维度上大小相同,继续比较下一维度。
    • 单维扩展:若其中一个张量在某一维度上大小为 1,则该维度会被扩展为另一个张量对应维度的大小。
    • 不兼容错误:若某一维度大小既不相同也不为 1,则抛出 RuntimeError,提示维度必须满足广播规则。
  3. 维度补全规则:若一个张量的维度少于另一个,会在其左侧补 1,直到维度数与另一个张量匹配。

加法的广播机制
#二维张量与一维向量相加
import torch# 创建原始张量
a = torch.tensor([[10], [20], [30]])  # 形状: (3, 1)
b = torch.tensor([1, 2, 3])          # 形状: (3,)result = a + b
# 广播过程
# 1. b补全维度: (3,) → (1, 3)
# 2. a扩展列: (3, 1) → (3, 3)
# 3. b扩展行: (1, 3) → (3, 3)
# 最终形状: (3, 3)print("原始张量a:")
print(a)print("\n原始张量b:")
print(b)print("\n广播后a的值扩展:")
print(torch.tensor([[10, 10, 10],[20, 20, 20],[30, 30, 30]]))  # 实际内存中未复制,仅逻辑上扩展print("\n广播后b的值扩展:")
print(torch.tensor([[1, 2, 3],[1, 2, 3],[1, 2, 3]]))  # 实际内存中未复制,仅逻辑上扩展print("\n加法结果:")
print(result)
乘法的广播机制

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

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

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

#批量矩阵与单个矩阵相乘
import torch# A: 批量大小为2,每个是3×4的矩阵
A = torch.randn(2, 3, 4)  # 形状: (2, 3, 4)# B: 单个4×5的矩阵
B = torch.randn(4, 5)     # 形状: (4, 5)# 广播过程:
# 1. B补全维度: (4, 5) → (1, 4, 5)
# 2. B扩展第一维: (1, 4, 5) → (2, 4, 5)
# 矩阵乘法: (2, 3, 4) @ (2, 4, 5) → (2, 3, 5)
result = A @ B            # 结果形状: (2, 3, 5)print("A形状:", A.shape)  # 输出: torch.Size([2, 3, 4])
print("B形状:", B.shape)  # 输出: torch.Size([4, 5])
print("结果形状:", result.shape)  # 输出: torch.Size([2, 3, 5])
#批量矩阵与批量矩阵相乘(部分广播)
# A: 批量大小为3,每个是2×4的矩阵
A = torch.randn(3, 2, 4)  # 形状: (3, 2, 4)# B: 批量大小为1,每个是4×5的矩阵
B = torch.randn(1, 4, 5)  # 形状: (1, 4, 5)# 广播过程:
# B扩展第一维: (1, 4, 5) → (3, 4, 5)
# 矩阵乘法: (3, 2, 4) @ (3, 4, 5) → (3, 2, 5)
result = A @ B            # 结果形状: (3, 2, 5)print("A形状:", A.shape)  # 输出: torch.Size([3, 2, 4])
print("B形状:", B.shape)  # 输出: torch.Size([1, 4, 5])
print("结果形状:", result.shape)  # 输出: torch.Size([3, 2, 5])
#三维张量与二维张量相乘(高维广播)
# A: 批量大小为2,通道数为3,每个是4×5的矩阵
A = torch.randn(2, 3, 4, 5)  # 形状: (2, 3, 4, 5)# B: 单个5×6的矩阵
B = torch.randn(5, 6)        # 形状: (5, 6)# 广播过程:
# 1. B补全维度: (5, 6) → (1, 1, 5, 6)
# 2. B扩展第一维: (1, 1, 5, 6) → (2, 1, 5, 6)
# 3. B扩展第二维: (2, 1, 5, 6) → (2, 3, 5, 6)
# 矩阵乘法: (2, 3, 4, 5) @ (2, 3, 5, 6) → (2, 3, 4, 6)
result = A @ B               # 结果形状: (2, 3, 4, 6)print("A形状:", A.shape)     # 输出: torch.Size([2, 3, 4, 5])
print("B形状:", B.shape)     # 输出: torch.Size([5, 6])
print("结果形状:", result.shape)  # 输出: torch.Size([2, 3, 4, 6])

@浙大疏锦行

http://www.dtcms.com/a/583920.html

相关文章:

  • 北京网站建设 性价比金口河移动网站建设
  • 网站设计 收费咖啡店网站模板
  • 云南省玉溪市建设局官方网站珠宝网站源码免费下载
  • 设计网站推荐素材网站怎样从网上卖东西啊
  • 云南网站建设天度高校网站建设运维体系问题
  • 专业SEO教程网站wordpress 文章点赞插件
  • 南通优普网站建设团队外贸建站哪个好
  • 国外有哪几家做充电桩网站男人女人做那事网站
  • 徐州网站建设熊掌号建e网室内设计3d效果
  • wordpress托管和建站网站三要素怎么做
  • 东莞常平火车站叫什么新泰网站开发
  • 龙书浩个人网站网页设计学校网站制作
  • 网站关键词搜索优化是怎么做的建站管理后台
  • 做网站最重要的是什么冬镜seo
  • 网站建设很简单搭建微信小程序
  • 唐山建设造价信息网的网站seo知名公司
  • 网站设计与制作教程1网站建设与管理代码题
  • 重庆 做网站北京奕杰企业管理咨询有限公司
  • 官方网站改版建议建设网站观澜
  • 响应式网站好处河北建设工程信息网天行建和园
  • 武进网站建设代理商jquery网站模版
  • 网站开发遇到的难题做简历的网站都有哪些内容
  • 网站教育培训机构十大排名什么是网站标题
  • cms电影网站模板石柱网站建设
  • 安宁市建设局网站百度竞价排名费用
  • 太原网站建设公司wordpress邮箱qq接入
  • 网站建设信息服务费计入什么科目品牌建设怎么写
  • 上海第五届中国国际进口博览会地址seo外包公司兴田德润
  • 域名 做网站和邮箱超市网站模板
  • 学做网站论坛会员账号苏州学校网站建设