Pytorch官方教程练习之Pytorch入门
程序员文章站
2022-06-11 22:43:03
...
什么是 PyTorch?
PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群:
- NumPy 的替代品,可以利用 GPU 的性能进行计算。
- 深度学习研究平台拥有足够的灵活性和速度
1.定义张量
Tensors 类似于 NumPy 的 ndarrays ,同时 Tensors 可以使用 GPU 进行计算。
导入torch模块
import torch
构造5×5矩阵
x = torch.empty(5, 3) # torch.empty返回未被初始化的随机数,区别于torch.rand(初始化为均匀分布)等.
print(x)
# 输出
tensor([[5.3413e-39, 0.0000e+00, 5.3413e-39],
[0.0000e+00, 2.6950e-36, 0.0000e+00],
[2.6950e-36, 0.0000e+00, 2.6950e-36],
[0.0000e+00, 2.6950e-36, 0.0000e+00],
[2.6950e-36, 0.0000e+00, 2.6950e-36]])
构造随机初始化矩阵:
x = torch.rand(5, 3) # torch.rand为均匀分布, torch.randn为标准正态分布
print(x)
# 输出
tensor([[ 0.6291, 0.2581, 0.6414],
[ 0.9739, 0.8243, 0.2276],
[ 0.4184, 0.1815, 0.5131],
[ 0.5533, 0.5440, 0.0718],
[ 0.2908, 0.1850, 0.5297]])
构造一个矩阵全为 0,而且数据类型是 long。
x = torch.zeros(5, 3, dtype=torch.long) # torch.zeros将矩阵值全设为0,可随意数据类型。
print(x)
# 输出
tensor([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])
直接使用指定数据,构造张量(tensor)
x = torch.tensor([5.5, 3])
print(x)
# 输出
tensor([ 5.5000, 3.0000])
基于已经存在的 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([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 1.0042, 2.9077, 0.3418],
[-1.7231, -0.1896, 0.2495],
[ 1.4710, -0.6653, -0.0418],
[ 0.4931, 0.7417, 0.3869],
[ 0.2716, -0.2167, -0.1279]])
获取tensor的维度信息
print(x.size())# or print(x.shape)
# 输出
torch.Size([5, 3])
2.基本操作
加法
y = torch.rand(5, 3)
print(x + y)
# 输出
tensor([[-0.1859, 1.3970, 0.5236],
[ 2.3854, 0.0707, 2.1970],
[-0.3587, 1.2359, 1.8951],
[-0.1189, -0.1376, 0.4647],
[-1.8968, 2.0164, 0.1092]])
or
print(torch.add(x, y))
or
result = torch.empty(5, 3)
# 提供一个输出 tensor 作为参数
torch.add(x, y, out=result)
print(result)
# 输出
tensor([[-0.1859, 1.3970, 0.5236],
[ 2.3854, 0.0707, 2.1970],
[-0.3587, 1.2359, 1.8951],
[-0.1189, -0.1376, 0.4647],
[-1.8968, 2.0164, 0.1092]])
覆盖加法
# adds x to y
y.add_(x) # add_()代表把x加到y,并覆盖y原有的值,
# 如x.copy_(y)、x.t_()均会改变原值。
print(y)
# 输出
tensor([[-0.1859, 1.3970, 0.5236],
[ 2.3854, 0.0707, 2.1970],
[-0.3587, 1.2359, 1.8951],
[-0.1189, -0.1376, 0.4647],
[-1.8968, 2.0164, 0.1092]])
切片
print(x[:, 1]) # 对数组进行切片,:表示选取所有行;1表示切片0到1(但不包括1)范围,即切第0列。
# 输出
tensor([ 0.4477, -0.0048, 1.0878, -0.2174, 1.3609])
改变大小
x = torch.randn(4, 4)
y = x.view(16)# 将4行4列矩阵调整为1维数组16个数,即用view()调整大小。
z = x.view(-1, 8) # -1表示根据其他参数调整矩阵大小,如,第二个参数为8,-1则表示2,即调整为2行8列矩阵。优点,不用计算,方便。
print(x.size(), y.size(), z.size())
# 输出
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
获取tensor元素值
x = torch.randn(1)
print(x)
print(x.item())# item()用来获取tensor元素数值,但只能获取一个值,
# 一般用于tensor的累加。如,running_loss += loss.item()
#输出
tensor([-0.4464])
-0.44643348455429077
x不只含一个元素张量
x = torch.randn(2, 2)
print(x)
print(x[0, 1])
print(x[0, 1].item())# item()可获取某一指定位置元素值。
参考
http://pytorch123.com/