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

潍坊百度网站建设wordpress 远程管理

潍坊百度网站建设,wordpress 远程管理,中国建筑集团招聘信息,分答网站这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…

这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。

Tensor基础

Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或大小。view()方法用于在不改变其数据的情况下将张量重塑为新的形状。它返回原始张量的新视图。这意味着修改新的张量会影响原来的张量,反之亦然。
在这里插入图片描述

语法:

Tensor.view(*shape) -> Tensor
  • self:想要重塑的输入Tensor。
  • *shape:一个torch.Size对象或指定输出张量所需形状的整数序列。还可以使用-1从其他维度推断一个维度的大小。

然而,Tensor.view()仅适用于连续张量,即存储在连续内存中的张量。如果输入张量不是连续的,则需要在调用tensor .view()之前调用tensor.consecuous()。你可以通过调用tensor.is_consecuous()来检查张量是否是连续的。

代码示例

下面演示如何在实践中使用tensor.view()方法:

>>> import torch
>>> torch.manual_seed(2023)
>>> # Create a tensor with the shape of 4x4
>>> x = torch.randn(4, 4)
>>> print(x)
tensor([[ 0.4305, -0.3499,  0.4749,  0.9041],[-0.7021,  1.5963,  0.4228, -0.6940],[ 0.9672,  1.5569, -2.3860,  0.6994],[-1.0325, -2.6043,  0.9337, -0.1050]])
>>> y = x.view(16)
>>> print(y)
tensor([ 0.4305, -0.3499,  0.4749,  0.9041, -0.7021,  1.5963,  0.4228, -0.6940,0.9672,  1.5569, -2.3860,  0.6994, -1.0325, -2.6043,  0.9337, -0.1050])
>>> z=x.view(2,8)
>>> print(z)
tensor([[ 0.4305, -0.3499,  0.4749,  0.9041, -0.7021,  1.5963,  0.4228, -0.6940],[ 0.9672,  1.5569, -2.3860,  0.6994, -1.0325, -2.6043,  0.9337, -0.1050]])
>>> w=x.view(-1,2)
>>> print(w)
tensor([[ 0.4305, -0.3499],[ 0.4749,  0.9041],[-0.7021,  1.5963],[ 0.4228, -0.6940],[ 0.9672,  1.5569],[-2.3860,  0.6994],[-1.0325, -2.6043],[ 0.9337, -0.1050]])
>>> 

你可以看到y和x有相同的数据,但形状不同,是16x1。Z和x有相同的数据,但形状不同,是2x8。W和x有相同的数据,但形状不同,是8x2。w的最后一个维度是从其他维度和x中的元素数量推断出来的。

Torch.view()和torch.reshape()的区别

torch.reshape()函数和tensor .view()方法之间的区别在于torch.reshape()可以返回原始张量的视图或副本,具体取决于新形状是否与原始形状和步幅兼容,而tensor .view()总是返回原始张量的视图,但仅适用于连续张量。

当你想重塑一个张量而不担心它的连续性或复制行为时,你应该使用torch.reshape(),当你想重塑一个连续张量并确保它与原始张量共享相同的数据时,你应该使用tensor. view()。

示例对比

场景 1:数据连续时,两者行为一致
import torch# 创建一个连续存储的张量 (2x3)
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("原始形状:", x.shape)      # (2, 3)
print("是否连续:", x.is_contiguous())  # True# 使用 view 改变形状 (3x2)
y = x.view(3, 2)
print("view 结果:", y)           # [[1, 2], [3, 4], [5, 6]]# 使用 reshape 改变形状 (3x2)
z = x.reshape(3, 2)
print("reshape 结果:", z)        # [[1, 2], [3, 4], [5, 6]]

结果一致,且未复制数据(is_contiguous() 返回 True)。

场景 2:数据不连续时,view 失败,reshape 成功
# 转置后数据不再连续(原按行存储,转置后按列逻辑访问)
x_transposed = x.t()
print("转置后形状:", x_transposed.shape)      # (3, 2)
print("是否连续:", x_transposed.is_contiguous())  # False# 尝试用 view 改变形状 → 报错!
try:y = x_transposed.view(2, 3)
except RuntimeError as e:print("view 错误:", str(e))  # "invalid argument: cannot view a non-contiguous tensor as ..."# 使用 reshape 成功(自动复制数据)
z = x_transposed.reshape(2, 3)
print("reshape 结果:", z)         # [[1, 4], [2, 5], [3, 6]]
print("是否连续:", z.is_contiguous())  # True
场景 3:reshape 的灵活性(使用 -1
# 不确定某一维度的大小时,仅用 reshape
x_2d = torch.randn(4, 6)  # 形状 (4, 6)
# 将最后一维压缩为总和,剩余维度自动推断
y = x_2d.reshape(-1, 3)   # 结果形状: (8, 3)
print(y.shape)              # torch.Size([8, 3])

因此,我们应优先用 view:当数据连续且形状明确时,view 更高效(零复制);优先用 reshape:需处理非连续数据、动态推断维度或不确定形状时。

http://www.yayakq.cn/news/765839/

相关文章:

  • 怎样做网站轮播佛山企业管理咨询有限公司
  • 做网站空间需要多大seo关键词优化软件
  • 辽宁省高等级公路建设局网站网站alt标签
  • 网站移动页面怎么做的艺术设计
  • 北京建网站软件爱南宁app下载
  • 个人网站设计论文摘要关键词安卓版网页制作软件
  • 温岭市溪建设局网站建设网站一般要多少钱
  • 营销最好的网站建设公司做一视频网站多少钱
  • 正中路桥建设发展有限公司网站亿玫网站建设
  • 上海自聊自做网站二级域名是什么意思
  • 汉川网站制作做网站公司哪家好
  • 做水产的都用什么网站flash网站怎么制作
  • 网站建设服务合同书建筑人才网河南省2022年3月安全员
  • 住房和城乡建设网站ui设计的尺寸
  • 江西专业的企业网站建设公司产品网页的制作
  • 公司网站建设维护管理办法做淘客网站哪个cms好
  • 建设项目环保备案登记网站华为软件开发工程师待遇
  • asp.net 开发的网站wordpress后台添加广告
  • 哪个网站可以做360度评估怎么用ps做网站上的产品图
  • 东莞如何搭建网站建设wordpress 添加链接地址
  • iis7如何部署网站广州番禺邮编
  • 金泉网 网站建设百度网址大全旧版本
  • 网站建设与实现的要求与务html企业网站模板
  • 网站交互方式网站 所有权
  • 网站收录量怎么提升电子商务网站租用服务器费用
  • 网站的网页设计毕业设计wordpress logo设置
  • 中山网站开发公司做网站公司做网站公司有哪些
  • 做酱菜网站电子产品论坛都有哪些
  • 上海网站制作官网嵌入式软件开发工程师培训
  • 微网站用什么做的网站开发研究手段有哪些