序言:最近准备一直在用pytorch,特地总结一下如何快速用pytorch搭建神经网络学习人工智能。
目录
1.pytorch入门
1.1pytorch是什么
1.2安装pytorch
2. pytorch基本操作元素
2.1 Tensors张量
2.2 张量运算
2.3 张量索引
2.4 Torch tensor与Numpy ndarray转换
2.5 cpu与gpu的tensor相互转换
3.总结
1.pytorch入门
1.1pytorch是什么
- 2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。
- 基于Python的可续计算包,提供两个高级功能:
- 具有强大的GPU加速的张量计算(如NumPy)。
- 包含自动求导系统的深度神经网络。
1.2安装pytorch
- 这里建议pycharm和anaconda一起使用,anaconda用来管理环境,pycharm写代码。
- 访问PyTorch,根据自己电脑配置选择选项,然后将生成的复制command到cmd窗口进行安装
conda install pytorch torchvision torchaudio cpuonly -c pytorch
- 安装完成后,查看pytorch是否安装成功
import torch
print("pytorch版本",torch.__version__)
print("是否支持gpu", torch.cuda.is_available())】
2. pytorch基本操作元素
2.1 Tensors张量
- Tensors张量类似于Numpy中的ndarray数据结构, 最大的区别在于Tensor可以利用GPU的加速功能.
- 创建一个空矩阵
x=torch.empty(5,3)
print(x)
- 创建随机分布的矩阵,标准高斯分布
#创建随机分布的矩阵,标准高斯分布
x=torch.rand(5,3)
print(x)
- 创建全零矩阵,数据元素类型long
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
- 直接赋值创建张量
x=torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(x)
- 通过已有的一个张量创建相同尺寸的新张量
x = torch.ones(5,3,dtype=torch.double)
print(x)
y = torch.randn_like(x, dtype=torch.float)
print(y)
- 张量的尺寸
print(x.size())
a,b=x.size()
print("a:",a)
print("b:",b)
2.2 张量运算
- +,-,*,/
# +,-,*,/
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # **运算符是求幂运算
- 转换张量形状reshape和view
## 转换张量形状
x=torch.arange(12,dtype=torch.float32).reshape(3,4)
print(x)
x=x.reshape(4,3)
print(x)
y=x.view(3,4)
print(y)
因此当不确能否使用view时,可以使用reshape。如果只是想简单地重塑一个tensor的shape,那么就是用reshape,但是如果需要考虑内存的开销而且要确保重塑后的tensor与之前的tensor共享存储空间,那就使用view()。
————————————————
原文链接:
- 沿着行或者列的方向联结,dim=0是行,1是列。
#沿着行或者列的方向联结
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
x = torch.arange(12, dtype=torch.float32).reshape((3,4))
print(x)
print("行:",torch.cat((x, y), dim=0))#行
print("列:",torch.cat((x, y), dim=1))#列
print(x[:, 1])#所有行的第2列
2.3 张量索引
- 初始数据
x = torch.arange(12, dtype=torch.float32).reshape((3,4))
- x[-1], x[1:3]
- 指定位置写入元素 x[1, 2] = 9
2.4 Torch tensor与Numpy ndarray转换
- torch张量和numpy数组将共享它们的底层内存,简单说就是操作更改一个张量也会同时更改另一个张量。
- 所有在CPU上的Tensors, 除了CharTensor, 都可以转换为Numpy array并可以反向转换.
a = torch.ones(5)
print(type(a),a)
b=a.numpy()
print(type(b),b)
c=torch.tensor(b)
print(type(c),c)
2.5 cpu与gpu的tensor相互转换
- 在实际计算中,传入cpu与gpu的变量不一样,需要相互转换类型才能一起运算
- 使用.to 方法实现
if torch.cuda.is_available():
# 定义一个设备对象, 这里指定成CUDA, 即使用GPU,如果有多个gpu可以用cuda0,cuda1表示
device = torch.device("cuda")
# 直接在GPU上创建一个Tensor
y = torch.ones_like(x, device=device)
# 将在CPU上面的x张量移动到GPU上面
x = x.to(device)
# x和y都在GPU上面, 才能支持加法运算
z = x + y
# 此处的张量z在GPU上面
print(z)
# 也可以将z转移到CPU上面, 并同时指定张量元素的数据类型
print(z.to("cpu", torch.double))
3.总结
- 矩阵的初始化
- torch.empty()
- torch.rand(n, m)
- torch.zeros(n, m, dtype=torch.long)
- torch.ones(n,m,dtype=torch.double)
- 矩阵运算
- x + y
- x - y,
- x * y,
- x / y,
- x ** y
- 矩阵转换形状
- reshape()
- view()
- 矩阵索引
- 方向联结
- torch.cat((x, y), dim=0)行
- torch.cat((x, y), dim=1)列
- Torch Tensor和Numpy Array之间的相互转换
- b=a.numpy()
- c=torch.tensor(b)
- cpu与gpu的tensor相互转换
- x = x.to(device)