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

合肥网站建设服务百度推广广告公司

合肥网站建设服务,百度推广广告公司,大气好看的网站,深圳建设网站的公司又名:张亮的一生~~ 张量(Tensors)初始化张量张量的属性张量上的操作与NumPy桥接 张量(Tensors) 张量是一种专门的数据结构,类似Python中的数组或者矩阵。在Torch中,我们使用张量来编码模型的输…

又名:张亮的一生~~

  • 张量(Tensors)
    • 初始化张量
    • 张量的属性
    • 张量上的操作
    • 与NumPy桥接

张量(Tensors)

张量是一种专门的数据结构,类似Python中的数组或者矩阵。在Torch中,我们使用张量来编码模型的输入和输出,以及模型的参数。

张量类似于NumPy库中的的数据类型:ndarray,只是张量可以在GPU或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据(请参阅Bridge with NumPy)。

张量还针对自动微分进行了优化(我们将在稍后的自动求导部分中看到更多信息)。如果您熟悉ndarray,您将对Tensor API了如指掌。如果没有,请继续学习!

在你使用下面的代码测试之前,请先引入包。

import torch
import numpy as np

初始化张量

张量可以通过各种方式初始化。看看下面的例子:

  • 直接来自数据:张量可以直接从数据中创建。数据类型是自动推断的。
data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)
  • 来自NumPy数组:张量可以从NumPy数组创建(反之亦然-请参阅Bridge with NumPy)。
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
  • 来自另一个张量:除非显式覆盖,否则新张量保留参数张量的属性(形状、数据类型)。
x_ones = torch.ones_like(x_data) # retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")
# 他们的输出会像下面这样:
Ones Tensor:tensor([[1, 1],[1, 1]])Random Tensor:tensor([[0.8823, 0.9150],[0.3829, 0.9593]])
  • 具有随机或恒定值shape是张量维度的元组。在下面的函数中,它确定输出张量的维度。
shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")# 他们的输出会像下面这样:
Random Tensor:tensor([[0.3904, 0.6009, 0.2566],[0.7936, 0.9408, 0.1332]])Ones Tensor:tensor([[1., 1., 1.],[1., 1., 1.]])Zeros Tensor:tensor([[0., 0., 0.],[0., 0., 0.]])

张量的属性

张量的属性描述了它们的形状、数据类型和存储它们的设备。

tensor = torch.rand(3,4)print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")# 他们的输出:
Shape of tensor: torch.Size([3, 4])
Datatype of tensor: torch.float32
# 创建张量默认在cpu上,除非指定设备:tensor = torch.rand(3, 4, device=device)或者使用 .to() 方法移动张量
Device tensor is stored on: cpu

张量上的操作

超过1200种张量运算,包括算术、线性代数、矩阵操作(转置、索引、切片)、采样和更全面的描述在这里。

这些操作中的每一个都可以在CPU和加速器上运行,例如CUDA、MPS、MTIA或XPU。如果您使用Colab,请通过转到运行时>更改运行时类型>GPU来分配加速器。

加速器的含义
在PyTorch存储库中,我们将加速器定义为与CPU一起使用以加快计算速度的设备(torch.device)。这些设备使用异步执行方案,使用torch.Stream和torch.Event作为执行同步的主要方式。我们还假设给定主机上一次只能使用一个这样的加速器。这允许使用当前加速器作为相关概念的默认设备,例如:

  • Pinned Memory(固定内存,也称为页锁定内存)
  • Stream device_type(流设备类型)
  • FSDP(Fully Sharded Data Parallel,全分片数据并行)

默认情况下,张量是在CPU上创建的。我们需要使用.to方法将张量显式移动到加速器(在检查加速器可用性之后)。请记住,跨设备复制大型张量在时间和内存方面可能很昂贵!

# We move our tensor to the current accelerator if available
if torch.accelerator.is_available():tensor = tensor.to(torch.accelerator.current_accelerator())

现在,尝试列表中的一些操作。如果您熟悉NumPy API,您会发现使用Tensor API轻而易举。

  • 标准的类似numpy的索引和切片
tensor = torch.ones(4, 4)
print(f"First row: {tensor[0]}")
print(f"First column: {tensor[:, 0]}")
print(f"Last column: {tensor[..., -1]}")
tensor[:,1] = 0
print(tensor)
# 输出会像是
First row: tensor([1., 1., 1., 1.])
First column: tensor([1., 1., 1., 1.])
Last column: tensor([1., 1., 1., 1.])
tensor([[1., 0., 1., 1.],[1., 0., 1., 1.],[1., 0., 1., 1.],[1., 0., 1., 1.]])
  • 连接张量:您可以使用torch.cat沿给定维度连接张量序列。另请参阅torch. stack,另一个张量连接运算符,与torch.cat略有不同。
t1 = torch.cat([tensor, tensor, tensor], dim=1)
print(t1)
# 输出
tensor([[1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],[1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],[1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.],[1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1.]])
  • 算术运算
tensor = torch.ones(4, 4)
tensor[:,1] = 0
# 下面的代码是在计算两个张量之间的矩阵乘法,并且 y1、y2、y3 的值将相同
# tensor.T 操作会返回张量 tensor 的转置,@表示矩阵之间的乘法。
y1 = tensor @ tensor.T
# 使用张量的 matmul 方法进行矩阵乘法,同样是 tensor 与它的转置相乘,结果赋值给 y2
y2 = tensor.matmul(tensor.T)y3 = torch.rand_like(y1)
# 使用 torch.matmul 函数进行矩阵乘法,并将结果存储在 y3 中。out 参数指定了结果存储的目标张量
torch.matmul(tensor, tensor.T, out=y3)# 下面的代码是在计算两个张量之间的逐元素乘法,并且 z1、z2、z3 的值将相同
z1 = tensor * tensor
# 使用张量的 mul 方法进行逐元素乘法,将 tensor 与自身逐元素相乘,结果赋值给 z2
z2 = tensor.mul(tensor)z3 = torch.rand_like(tensor)
# 使用 torch.mul 函数进行逐元素乘法,并将结果存储在 z3 中。out 参数指定了结果存储的目标张量
torch.mul(tensor, tensor, out=z3)# 可以在y1y2,y3,z1,z2,z3处一一添加输出,y1,y2,y3是全是3的矩阵,z1,z2,z3就是tensor本身。(因为1*1 = 1 0*0 =0)
  • 单元素张量:如果您有一个单元素张量,例如通过将张量的所有值聚合为一个值,您可以使用item()将其转换为Python数值:
agg = tensor.sum()
agg_item = agg.item()
print(agg_item, type(agg_item))
#输出
12.0 <class 'float'>
  • 就地操作:将结果存储到操作数中的操作称为就地操作。它们由_后缀表示。例如:x.copy_(y)x.t_(),将更改x。
    add_:加,copy_:复制,t_:转置.sub_:减法,mul_:乘法,div_:除法,zero_:变0,fill_:所有元素变为指定元素。

    就地操作可以节省一些内存,但在计算导数时可能会出现问题,因为会立即丢失历史记录。因此,不鼓励使用它们。
    
print(f"{tensor} \n")
tensor.add_(5)
print(tensor)
# 输出
tensor([[1., 0., 1., 1.],[1., 0., 1., 1.],[1., 0., 1., 1.],[1., 0., 1., 1.]])tensor([[6., 5., 6., 6.],[6., 5., 6., 6.],[6., 5., 6., 6.],[6., 5., 6., 6.]])

与NumPy桥接

CPU上的NumPy数组与张量可以共享它们的底层内存位置,改变一个就会改变另一个。

  • 张量到NumPy数组
t = torch.ones(5)
print(f"t: {t}")
n = t.numpy()
print(f"n: {n}")
# 输出
t: tensor([1., 1., 1., 1., 1.])
n: [1. 1. 1. 1. 1.]
此时,张量的变化会反映在NumPy数组中。
t.add_(1)
print(f"t: {t}")
print(f"n: {n}")
# 输出
t: tensor([2., 2., 2., 2., 2.])
n: [2. 2. 2. 2. 2.]
  • NumPy数组到张量
n = np.ones(5)
t = torch.from_numpy(n)
NumPy数组的变化也反映在张量中。
np.add(n, 1, out=n)
print(f"t: {t}")
print(f"n: {n}")
# 输出
t: tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
n: [2. 2. 2. 2. 2.]

文章转载自:

http://fzaSS1il.rfwkn.cn
http://TLbRFMgd.rfwkn.cn
http://oeV8Jhyt.rfwkn.cn
http://UOus8ahn.rfwkn.cn
http://k6fYKUYS.rfwkn.cn
http://B1gDlV90.rfwkn.cn
http://f88srcL9.rfwkn.cn
http://0H2nHqzP.rfwkn.cn
http://Bg1Xtsqi.rfwkn.cn
http://SPmtK9Gz.rfwkn.cn
http://BhRIS4WH.rfwkn.cn
http://dVRtTr4B.rfwkn.cn
http://fSHMZDnY.rfwkn.cn
http://OdjzUQlU.rfwkn.cn
http://55FLjS1Z.rfwkn.cn
http://qxveFisP.rfwkn.cn
http://Wf5GaK16.rfwkn.cn
http://Oxj1lprW.rfwkn.cn
http://JWb3H3dg.rfwkn.cn
http://2B5hx23r.rfwkn.cn
http://FvTCVBbU.rfwkn.cn
http://9l4qvghQ.rfwkn.cn
http://l60q7yh1.rfwkn.cn
http://sOuz9QIb.rfwkn.cn
http://FQy72wSx.rfwkn.cn
http://KUY5crxj.rfwkn.cn
http://QrJqRhao.rfwkn.cn
http://uXQ7SJ1V.rfwkn.cn
http://mzCoIMGO.rfwkn.cn
http://kL9tHgDU.rfwkn.cn
http://www.dtcms.com/wzjs/715193.html

相关文章:

  • 不利于网站收录怎么做网络平台
  • 杭州模板开发建站常州百度网站排名优化
  • 有个人做网站的吗长沙零零七网站建设
  • led灯网站策划书如何做个网站
  • 5118网站是免费的吗自助建设分销商城网站
  • 石家庄个人谁做网站合肥专业网站制作团队
  • 网站后台密码忘了微信小程序投票怎么快速投多票
  • 关于建设工程的网站什么是优化网站
  • 做培训体系的网站手机和网站页面模板
  • 网站建设计划建议wordpress做简单的商城
  • 大型门户网站有哪些海口网红景点
  • icp备案 网站名称网站设计 中高端
  • 网站开发都需要哪些图专门帮做ppt的网站
  • 做百度手机网站优化做影视网站存储视频会侵权吗
  • 哪里可以找人做网站如皋建设局网站
  • 深圳网站制作公司兴田德润官网多少wordpress 登录不上
  • 上海网站建设润滋网站规划与建设 第2版ppt
  • 卖域名的网站哪个好河北招投标网招标公告
  • 郑州网站app开发的凡科做的网站百度不到
  • 河南平台网站建设公司怎么自做网站
  • 基地网站建设方案网站规划的一般步骤
  • 临沂做百度网站软件公司seo好学吗入门怎么学
  • 关于网站空间用r做简易的网站
  • 零基础网站建设教学公司佛山网站seo哪家好
  • html写手机网站公司建网站需要先注册域名
  • 做网站用phpcms还是烟台制作网站软件
  • 一个网站建设域名的构思做网站得叫什么软件
  • 个人做外贸网站平台有哪些网站开发设计比赛
  • 晋江网站建设联系电话一点空间网站建设
  • 纪检监察网站建设 讲话网站建设需要几步