PyTorch进阶之路(一):张量与梯度
PyTorch 是 Facebook 开发和维护的一个开源的神经网络库
PyTorch 模型的基本构件:张量和梯度
import torch
#Number
t1 = torch.tensor(4.0)
t1
tensor(4.)
t1.dtype
torch.float32
#Vector
t2 = torch.tensor([1.0,2,3,4])
t2
tensor([1., 2., 3., 4.])
#Matrix
t3 = torch.tensor([[5,6], [7,8], [9,10]])
t3
tensor([[ 5, 6],
[ 7, 8],
[ 9, 10]])
#3D array
t4 = torch.tensor([[[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]]])
t1.shape
torch.Size([])
t2.shape
torch.Size([4])
t3.shape
torch.Size([3, 2])
t4.shape
torch.Size([2, 2, 3])
张量运算和梯度
我们可以将张量与常用的算数运算相结合
# create tensors.
x = torch.tensor(3.)
w = torch.tensor(4., requires_grad = True)
b = torch.tensor(5., requires_grad = True)
创建了3个张量,w和b 有额外的参数: requires_grad
#Arithmetic operations 运算操作
y = x * w + b
y
tensor(17., grad_fn=<AddBackward0>)
y 是值为 3 * 4 + 5 = 17 的张量。PyTorch 的特殊之处在于,我们可以自动计算 y 相对于张量(requires_grad 设置为 True)的导数,即 w 和 b。为了计算导数,我们可以在结果 y 上调用.backward 方法。
#Compute derivatives 计算派生
y.backward( )
print("dy/dx:", x.grad)
print("dy/dw", w.grad)
print("dy/db", b.grad)
dy/dx: None
dy/dw tensor(3.)
dy/db tensor(1.)
如预期所料,dy/dw 的值与 x 相同(即 3),dy/db 的值为 1。注意,x.grad 的值为 None,因为 x 没有将 requires_grad 设为 True。w_grad 中的「grad」代表梯度,梯度是导数的另一个术语,主要用于处理矩阵。
与 Numpy 之间的互操作性
import numpy as np
x = np.array([[1,2],[3,4]])
y = torch.from_numpy(x) # torch.fron_numpy 将 Numpy 数组转化为 PyTorch 张量
y
tensor([[1, 2],
[3, 4]])
# 接下来可以验证 Numpy 数组和 PyTorch 张量是否拥有类似的数据类型
print(x.dtype)
print(y.dtype)
int64
torch.int64
#使用张量的.to_numpy 方法将 PyTorch 张量转化为 Numpy 数组
z = y.numpy()
z
array([[1, 2],
[3, 4]])
import jovian #[ˈdʒəʊvɪən] 木星
jovian.commit()
[jovian] Saving notebook..