PyTorch是一个开源的Python机器学习库,基于Torch,底层由C++实现,应用于人工智能领域,如自然语言处理。它主要由Facebook的人工智能研究团队开发,并且被用于Uber的概率编程软件Pyro。
它包括以下特征:
(1)类似于NumPy的张量计算,可使用GPU加速;
(2)基于带自动微分系统的深度神经网络
与Tensorflow区别一言以蔽之:Pytorch用于学术界,Tensorflow用于工业界,但是近年来有点衰退
。
本文pytorch安装基于CPU,如有需要,可以选择其他安装方式(官网)
conda install pytorch torchvision torchaudio cpuonly -c pytorch
如果开代理的话,记得关闭代理,以免安装失败。
代码如下(示例):
# 导入库
import torch
代码如下(示例):
# 生成张量
x = torch.arange(12)
y = torch.arange(20).reshape(4,5)
print(x)
print(y)
# 获取张量的shape(依情况而定)
print(x.shape)
# 下面结果为(4,5)
print(y.shape)
结果为:
# 获取张量的元素个数(永远是标量)
print(x.numel())
print(y.numel())
结果为:
# 改变张量形状
x.reshape(3,4)
print(torch.zeros((2,3,4)))
print(torch.ones((3,4)))
torch.tensor([[2,3],[3,4],[5,6]])
p = torch.tensor([1.0,2,4,8])
q = torch.tensor([2,2,2,2])
print(p+q)
print(p-q)
print(p*q)
print(p/q)
print(p**q)
X = torch.arange(12, dtype=torch.float32).reshape(3,4)
Y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
print(torch.cat((X,Y),dim=0)) #按照行连接
print(torch.cat((X,Y),dim=1)) #按照列连接
# 逻辑运算
X == Y
# 求和
X.sum()
结果为:
# 广播机制
a = torch.arange(3).reshape(3,1)
b = torch.arange(2).reshape(1,2)
a,b,a+b
# 元素访问
print(X[-1]) # 访问最后一行
print(X[1:3]) # 访问[1,3)行
# 元素赋值
X[1,2] = 9 # 给第2行第3列元素赋值为9
X
# 多元素赋值
X[0:2,:] = 12 # 给第0行和第1行的所有列赋值为12
X
# 内存分配机制
before = id(Y)
Y = Y + X
id(Y) == before
结果为:
简单说明:在Python如果执行一些操作如加减乘除等会使得新结果分配到新的地址中
解决方法:
# 解决方法1
Z = torch.zeros_like(Y)
print('id(Z):', id(Z)) # id(Z): 2058851631576
Z[:] = X + Y
print('id(Z):', id(Z)) # id(Z): 2058851631576
# 解决方法2
print('id(X):', id(X)) # id(X): 2058851600408
X += Y
print('id(X):', id(X)) # id(X): 2058851600408
# 转换为Numpy张量
A = X.numpy()
B = torch.tensor(A)
type(A),type(B)
结果为:
# 将大小为1的张量转换为Python标量
a = torch.tensor([3.5])
a,a.item(),float(a),int(a) # items函数以列表返回可遍历的(键, 值) 元组数组。
以上就是Pytorch的入门内容,作为自己今后遗忘后复习的快速入门。