张量(tensor)的理解

本文从矢量的概念出发,介绍了矢量相较于标量所携带的方向信息,并进一步探讨了如何通过张量来改变矢量的大小与方向。文中详细解释了不同阶张量的概念及其数学表达方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 从标量到矢量:携带更丰富的信息

矢,是箭的意思,突出的特点是其指向性。

  • 袋子里有几个球? 3 个,magnitude(幅度,没有单位);
  • 从这到你家多远?3 km(denominate),3 称为 scalars,标量,或叫纯量;
  • 从这如何到达你的家里?步行 3km,显然是不够的,除了距离(distance)或者幅值(magnitude)外,还需要方向。具有了方向的距离,就是 vectors
    • 速度就是一个矢量,既有大小又有方向;
    • 自然动量 mv⃗ (momentum)也是一个矢量;

2. 张量的引入

λu⃗ :标量作用于矢量,只改变其大小,不改变其方向,如果作用才能既改变其大小又能改变其方向呢。我们不妨做如下的记号:

  • scalar:秩为 0 的 Tensor(仅有一个幅度值 - 3^0=1 components)
  • vector:秩为 1 的 Tensor(幅度值+一个方向 - 3^1=3 components)
    u=u1e1+u1e2+u1e3
    显然还可以做进一步的拓展:

  • Dyad:秩为 2 的 Tensor(幅度值+二个方向 - 3^2=9 components)

    • v=v11e1e1+v12e1e2+v13e1e3+v21e2e1+v21e2e1+v23e2e3+v31e3e1+v32e3e2+v33e3e3
  • Triad:秩为 3 的 Tensor(幅度值+三个方向)

转载于:https://www.cnblogs.com/mtcnn/p/9422923.html

### 使用张量进行基础练习 #### 创建不同类型的张量 创建张量是使用PyTorch的基础之一。下面展示了如何利用不同的方法来初始化张量。 ```python import torch # 创建全为0的张量,形状为 (2, 3) zeros_tensor = torch.zeros((2, 3)) print(zeros_tensor) # 创建全为1的张量,形状同样为 (2, 3),并指定了数据类型为 float64 ones_tensor = torch.ones((2, 3), dtype=torch.float64) print(ones_tensor) # 根据现有张量创建新张量,保持相同特性但填充随机数 random_tensor_like_ones = torch.rand_like(ones_tensor, dtype=torch.float) print(random_tensor_like_ones) ``` #### 修改张量属性 了解如何改变张量的尺寸和其他属性对于灵活应用非常重要。 ```python # 改变张量的形状而不改变其内容 reshaped_tensor = random_tensor_like_ones.view(-1) # 将多维张量展平成一维 print(f"Reshaped Tensor:\n{reshaped_tensor}") # 更改张量的数据类型 casted_tensor = reshaped_tensor.type(torch.int8) print(casted_tensor.dtype) ``` #### 执行简单的算术运算 掌握基本的操作有助于更深入理解张量之间的交互方式。 ```python a = torch.tensor([1., 2., 3.]) b = torch.tensor([4., 5., 6.]) addition_result = a + b # 加法 multiplication_result = a * b # 逐元素乘法 dot_product_result = torch.dot(a, b) # 向量点积 print(addition_result) print(multiplication_result) print(dot_product_result) ``` #### 计算梯度 当涉及到优化算法时,能够追踪和更新参数是非常重要的技能。 ```python x = torch.tensor([1., 2., 3., 4.], requires_grad=True) y = x.sum() y.backward() print(x.grad) # 应该打印出 [1., 1., 1., 1.] 表明每个位置上的偏导数值均为1[^2] # 清除之前累积的梯度以便于下次计算 if x.grad is not None: x.grad.zero_() ``` 通过上述例子可以看出,张量不仅支持多种创建方式,还提供了丰富的接口来进行各种各样的变换与操作。这些基础知识构成了后续复杂任务实现的前提条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值