pytorch:张量
[[pytorch]]
基础知识
导入
首先,我们导入torch
请注意,虽然它被称为PyTorch,但是代码中使用torch而不是pytorch
import torch
定义
张量表示一个由数值组成的数组,这个数组可能有多个维度
- 具有一个轴的张量:向量(vector)
- 具有两个轴的张量:矩阵(matrix)
- 具有两个轴以上的张量没有特殊的数学名称
初始化声明
torch提供的接口
使用 arange 创建
- x = torch.arange(12) - x - Copy to clipboard - tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
这个行向量包含以0开始的前12个整数,它们默认创建为整数
也可指定创建类型为浮点数
张量中的每个值都称为张量的 元素(element)
- 例如,张量 x 中有 12 个元素
除非额外指定,新的张量将存储在内存中,并采用基于CPU的计算
全1/全0初始化张量
全0
- torch.zeros((2, 3, 4)) - __________________ - tensor([[[0., 0., 0., 0.], - [0., 0., 0., 0.], - [0., 0., 0., 0.]], - [[0., 0., 0., 0.], - [0., 0., 0., 0.], - [0., 0., 0., 0.]]])
全1
- torch.ones((2, 3, 4)) - __________________ - tensor([[[1., 1., 1., 1.], - [1., 1., 1., 1.], - [1., 1., 1., 1.]], - [[1., 1., 1., 1.], - [1., 1., 1., 1.], - [1., 1., 1., 1.]]])
随机/概率分布 初始化张量
创建一个形状为(3,4)的张量,其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样
- >>>>>>>>>>>>>>>>> - torch.randn(3, 4) - ______________________ - tensor([[-0.0135, 0.0665, 0.0912, 0.3212], - [ 1.4653, 0.1843, -1.6995, -0.3036], - [ 1.7646, 1.0450, 0.2457, -0.7732]])
使用包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值
在这里,最外层的列表对应于轴0,内层的列表对应于轴1
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
tensor([[2, 1, 4, 3],
[1, 2, 3, 4],
[4, 3, 2, 1]])
属性
通过张量的shape属性来访问张量沿每个轴的长度
- x.shape
如果只想知道,即形状的所有元素乘积,可以检查它的大小(size)
- 因为这里在处理的是一个向量,所以它的shape与它的size相同
通过张量的numel()属性来访问张量中元素的总数
- x.numel()
变换
调用reshape函数改变一个张量的形状而不改变元素数量和元素值
例如,可以把张量x从形状为(12,)的行向量转换为形状为(3,4)的矩阵
这个新的张量包含与转换前相同的值,但是它被看成一个3行4列的矩阵
要重点说明一下,虽然张量的形状发生了改变,但其元素值并没有变
注意,通过改变张量的形状,张量的大小不会改变
X = x.reshape(3, 4)
X
Copy to clipboard
我们不需要通过手动指定每个维度来改变形状
幸运的是,我们可以通过-1来调用此自动计算出维度的功能
即我们可以用x.reshape(-1,4)或x.reshape(3,-1)来取代 x.reshape(3,4)
我的思考
tenser加法存在的问题
![[tenser加法存在的问题]]