PyTorch学习笔记1---张量

PyTorch中数据集用Tensor来表示,Tensor与Python中的List类似,但是其内部存储时以连续内存单元存储,可以通过下标计算出内存地址,然后直接读出数值,因此存取效率很高,同时由于与Numpy的内存存储基本相同,所以numpy的ndarray与Tensor之间转换,不论有多少元素,其转换只需数毫秒,非常高效。同时,Tensor可以在GPU上运行,因此比numpy的效率要高。

Tensor创建

创建空张量

创建空的 x ∈ R 5 \boldsymbol{x} \in R^{5} xR5向量:

x = torch.empty(5)

注意此时 x \boldsymbol{x} x中的元素 x i x_{i} xi的值是对应内存地址中的值,可以是任意无意义的值。
我们同样可以生成空的任意维度的张量,例如在深度学习中经常用到的设计矩阵(Design Matrix), X ∈ R 10 × 5 X \in R^{10 \times 5} XR10×5,表示共有10个样本,每个样本维度为5。可以用如下代码创建:

x = torch.empty([10,5])
张量创建并初始化

对于连接权值,我们通常使用随机数来初始化,在PyTorch中也有随机数初始化方法。我们先来看采用均匀分布来初始化:

W = torch.rand(5,3)

我们也可以用标准正态分布来进行初始化:

W = torch.randn(5,3)
用初始值创建

创建元素值为0或1的张量:

b = torch.zeros(5, 3, torch.float)
c = torch.ones(5, 3, torch.double)
用已知值初始化

通过已知值初始化张量:

x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
Numpy互操作性

在前面我们已经提到,由于与numpy在内存存储上是共用的,所以numpy的ndarray和Tensor之间互相转换,几乎是零成本的。如下所示:

a = np.ones(5)
b = torch.from_numpy(a) # ndarray转tensor
c = torch.tensor([1.0, 2.0, 3.0])
d = c.numpy() # Tensor转ndarray

Tensor常用操作

我们通常想知道Tensor的形状:

a = torch.ones(5, 3)
print(a.size())

我们以加法为例,来看加法的几种表示方式:

x = torch.ones(5,3)
y = torch.ones(5,3)
print(x+y)
print(torch.add(x, y)) # 加法函数
result = torch.empty(5, 3)
torch.add(x, y, out=result) # result返回和
print(result)
y.add_(x) # 将x加入到y中
print(y)

改变Tensor形状:

x = torch.ones(6, 3)
y = x.view(2, 9)
y_ = x.view(-1, 9) # 与上一行效果一致,第一维通过第二维推出

Tensor索引与numpy中相同,对于每一维:开始索引(0开始包含): 结束索引(不包括): 步长,并且-1代表最后一个元素,依此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值