发布者认证信息(营业执照和身份证)未完善,请登录后完善信息登录
总算理解详解PyTorch基本操作
总算理解详解PyTorch基本操作

总算理解详解PyTorch基本操作

作者:yhttedit   2021-11-18 13:08:58  点击:17

详情

PyTorch是一个基于Python的科学计算包,提供最大灵活性和速度的深度学习研究平台。

张量

张量类似于NumPy 的n 维数组,此外张量也可以在 GPU 上使用以加速计算。

让我们构造一个简单的张量并检查输出。首先让我们看看我们如何构建一个 5×3 的未初始化矩阵:

import torch x = (5, 3) print(x) 

输出如下:

tensor([[+32, -41, +32],         [-41, +00, +00],         [+00, +00, +00],         [+00, +00, +00],         [+00, +00, +00]]) 

现在让我们构造一个随机初始化的矩阵:

x = (5, 3) print(x) 

输出:

tensor([[-01, -01, -01],         [-01, -01, -01],         [-01, -02, -01],         [-01, -01, -01],         [-01, -01, -04]]) 

直接从数据构造张量:

x = ([, 3]) print(x) 

输出:

tensor([, ]) 

创建一个统一的长张量。

x = (3, 4) x  tensor([[,   ,   ,   ],         [  ,   ,   ,   ],         [  ,   ,   ,   ]])  「浮动张量。」 x = (3, 4) x  tensor([[--18,  -41,  -44,  +00],         [        nan,  -41,  +28,  +27],         [ +27,  +20,  +19,  +31]])  「在范围内创建张量」 (10, dtype=)  tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])  「重塑张量」 x = (10, dtype=)  x  tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 

使用 .view重塑张量。

(2, 5)  tensor([[0., 1., 2., 3., 4.],         [5., 6., 7., 8., 9.]]) 

-1根据张量的大小自动识别维度。

(5, -1)  tensor([[0., 1.],         [2., 3.],         [4., 5.],         [6., 7.],         [8., 9.]])  「改变张量轴」

改变张量轴:两种方法view和permute

view改变张量的顺序,而permute只改变轴。

x1 = ([[1., 2., 3.], [4., 5., 6.]]) print("x1:  ", x1) print(" :  ", ) print(" (3, -1):  ", (3 , -1)) print(" (1, 0):  ", (1, 0))   x1:   tensor([[1., 2., 3.],         [4., 5., 6.]])  :   ([2, 3])  (3, -1):   tensor([[1., 2.],         [3., 4.],         [5., 6.]])  (1, 0):   tensor([[1., 4.],         [2., 5.],         [3., 6.]])  张量运算

在下面的示例中,我们将查看加法操作:

y = (5, 3) print(x + y) 

输出:

tensor([[, , ],         [, , ],         [, , ],         [, , ],         [, , ]]) 

调整大小:如果你想调整张量的形状,你可以使用“”:

x = (4, 4) y = (16) # 大小-1是从其他维度推断出来的 z = (-1, 8)  print((), (), ()) 

输出:

([4, 4]) ([16]) ([2, 8])  PyTorch 和 NumPy的转换

NumPy 是Python 编程语言的库,增加了对大型、多维数组和矩阵的支持,以及对这些数组进行操作的大量高级数学函数集合。

将Torch中Tensor 转换为 NumPy 数组,反之亦然是轻而易举的!

Torch Tensor 和 NumPy 数组将共享它们的底层内存位置 ,改变一个将改变另一个。

「将 Torch 张量转换为 NumPy 数组:」 a = (5) print(a) 

输出:tensor([1., 1., 1., 1., 1.])

b = () print(b) 

输出:[1., 1., 1., 1., 1.]

让我们执行求和运算并检查值的变化:

(1) print(a) print(b) 

输出:

tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]  「将 NumPy 数组转换为 Torch 张量:」 import numpy as no a = (5) b = (a) (a, 1, out=a) print(a) print(b) 

输出:

[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=) 

所以,正如你所看到的,就是这么简单!

接下来在这个 PyTorch 教程博客上,让我们看看PyTorch 的 AutoGrad 模块。

AutoGrad

该autograd包提供自动求导为上张量的所有操作。

它是一个按运行定义的框架,这意味着您的反向传播是由您的代码运行方式定义的,并且每次迭代都可以不同。

(函数的反向传播) (计算图的反向传播) (数值梯度检查) (在自动求导时检测错误产生路径) (设置是否需要梯度) () 与 () (提供 function 级别的统计信息) 「下面使用 Autograd 进行反向传播。」

如果requires_grad=True,则 Tensor 对象会跟踪它是如何创建的。

 

x = ([1., 2., 3.], requires_grad = True) print('x: ', x) y = ([10., 20., 30.], requires_grad = True) print('y: ', y) z = x + y  print(' z = x + y') print('z:', z)  x:  tensor([1., 2., 3.], requires_grad=True) y:  tensor([10., 20., 30.], requires_grad=True)  z = x + y z: tensor([11., 22., 33.], grad_fn=) 

因为requires_grad=True,z知道它是通过增加两个张量的产生z = x + y。

 

s = () print(s)  tensor(66., grad_fn=) 

s是由它的数字总和创建的。当我们调用.backward(),反向传播从s开始运行。然后可以计算梯度。

() print(': ', ) print(': ', )  :  tensor([1., 1., 1.]) :  tensor([1., 1., 1.]) 

下面例子是计算log(x)的导数为1 / x

import torch x = ([, ], requires_grad=True) # 1 / x  y = (x[0] * x[1]) ()  # tensor([, ]) 

 

相关分类
请在电脑上注册登陆 网址:https://www.zxb2b.com/