(从B站某个大佬搬过来的,在加上自己的一些笔记,仅供自己参考)
B站pytorch视频
第一课
什么是PyTorch?
PyTorch是一个基于Python的科学计算库,它有以下特点:
类似于NumPy,但是它可以使用GPU
可以用它定义深度学习模型,可以灵活地进行深度学习模型的训练和使用
Tensors
Tensor类似与NumPy的ndarray,唯一的区别是Tensor可以在GPU上加速运算。
Torch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算. 所以神经网络的话, 当然是用 Torch 的 tensor 形式数据最好咯. 就像 Tensorflow 当中的 tensor 一样.
当然, 我们对 Numpy 还是爱不释手的, 因为我们太习惯 numpy 的形式了. 不过 torch 看出来我们的喜爱, 他把 torch 做的和 numpy 能很好的兼容. 比如这样就能自由地转换 numpy array 和 torch tensor 了(以下代码都是V1.0.1版本的)
from __future__ import print_function
import torch
#构造一个未初始化的5x3矩阵:
x = torch.empty(5, 3)
print(x)
构建一个随机初始化的矩阵:
x = torch.rand(5, 3)
print(x)
构建一个全部为0,类型为long的矩阵:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
从数据直接直接构建tensor:
x = torch.tensor([5.5, 3])
print(x)
也可以从一个已有的tensor构建一个tensor。这些方法会重用原来tensor的特征,例如,数据类型,除非提供新的数据。
x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes
print(x)
x = torch.randn_like(x, dtype=torch.float) # override dtype!
print(x) # result has the same size
得到tensor的形状:
print(x.size())
torch.Size([5, 3])
#注意
#``torch.Size`` 返回的是一个tuple
Operations
有很多种tensor运算。我们先介绍加法运算。
y = torch.rand(5, 3)
print(x + y)
另一种着加法的写法
print(torch.add(x, y))
加法:把输出作为一个变量
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
in-place加法
#adds x to y
y.add_(x)
print(y)
注意
任何in-place的运算都会以_
结尾。 举例来说:x.copy_(y)
, x.t_()
, 会改变 x
。
各种类似NumPy的indexing都可以在PyTorch tensor上面使用。
print(x[:, 1])
Resizing: 如果你希望resize/reshape一个tensor,可以使用torch.view:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
如果你有一个只有一个元素的tensor,使用.item()方法可以把里面的value变成Python数值。
x = torch.randn(1)
print(x)
print(x.item())
更多阅读
各种Tensor operations, 包括transposing, indexing, slicing, mathematical operations, linear algebra, random numbers在 pytorch文档
Numpy和Tensor之间的转化
在Torch Tensor和NumPy array之间相互转化非常容易。
Torch Tensor和NumPy array会共享内存,所以改变其中一项也会改变另一项。
把Torch Tensor转变成NumPy Array
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
改变numpy array里面的值。
Ia.add_