深度学习 1.PyTorch入门

发布时间:2024-05-20 11:01

Author:baiyucraft

BLog: baiyucraft’s Home

原文:《动手学深度学习》


一、深度学习简介

1.深度学习

  首先,我们得知道什么是深度学习:

深度学习是一种特殊的机器学习,通过学习将世界使用嵌套的概念层次来表示并实现巨大的功能和灵活性,其中每个概念都定义为与简单概念相关联,而更为抽象的表示则以较不抽象的方式来计算。

  其实目前来说我也不太清楚机器学习和深度学习具体的概念,所以这块留白,日后补充。

2.PyTorch

  在深度学习中,这里我们选择PyTorch作为机器学习库,PyTorch是一个开源的深度学习框架。我们知道,计算机做的主要步骤,是对数据的处理,为了完成各种操作,我们需要某种方法来存储和操作数据。所以在PyTorch中,用张量tensor来存储数据,并且PyTorch中的张量支持使用GPU加速运算,并且支持自动微分。

3.Google Colab

  因为对于大部分人来说,GPU的价格太过昂贵,所以在学习过程中有个折中方法,利用Google 的 Colab就能有免费的GPU使用,还不用装环境,具体操作可以百度。

二、数据操作

  首先,在运用PyTorch前,肯定要包,需要注意的是,导入的包名叫torch而不是pytorch

import torch

  张量tensor的表现看来可以认为是n维的数组,也就是说这个数组是具有维度的。一维的就对应数学上的向量vector,二维的对应数学上的矩阵matrix

  在默认情况下,张量tensor中的元素都是浮点数,且存储在内存中,基于CPU计算的。

1.张量的生成

  arrange():arrange(n)来创建一个行向量,其作用类似于Python自带的range(n);

  shape: 通过tensorshape属性来访问它的形状;

  numel():numel()函数可以查看tensor中所有元素的总数,即形状的所有元素的乘积;

  reshape(): 要改变一个tensor的形状而不改变元素总数和元素值,可以调用reshape()函数实现,在给出其他部分后可以自动计算出一个维度。我们可以通过将希望tensor自动推断的维度放置 -1 来调用此功能。我们可以用 reshape(-1, 4)reshape(3, -1)来取代reshape(3, 4)

  zero():zero()函数可以创建一个全为0的tensor

  ones():ones()函数可以创建一个全为1的tensor

  randn():randn()函数可以创建一个全随机初始化参数的tensor,每个元素都从均值为0、标准差为1的标准正态分布中随机采样;

  tensor():tensor()函数可以直接从嵌套列表生成tensor

代码:

# x1
print("======x1======")
x1 = torch.arange(12)
print("x1为:", x1)
print("x1的形状为:", x1.shape)
print("x1的形状为:", x1.size())
print("x1的元素总数为:", x1.numel())
# x2
print("======x2======")
x2 = x1.reshape(3, 4)
print("x2为:", x2)
print("x2的形状为:", x2.shape)
print("x2的元素总数为:", x2.numel())
# x3
print("======x3======")
x3 = torch.zeros((2, 3, 4))
print("x3为:", x3)
# x4
print("======x4======")
x4 = torch.ones((2, 3, 4))
print("x4为:", x4)
# x5
print("======x5======")
x5 = torch.randn(3, 4)
print("x5为:", x5)
# x6
print("======x6======")
x6 = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print("x6为:", x6)# x1
x1 = torch.arange(12)
print("x1为:", x1)
print("x1的形状为:", x1.shape)
print("x1的形状为:", x1.size())
print("x1的元素总数为:", x1.numel())
# x2
x2 = x1.reshape(3, 4)
print("x2为:", x2)
print("x2的形状为:", x2.shape)
print("x2的元素总数为:", x2.numel())
# x3
x3 = torch.zeros((2, 3, 4))
print("x3为:", x3)
# x4
x4 = torch.ones((2, 3, 4))
print("x4为:", x4)
# x5
x5 = torch.randn(3, 4)
print("x5为:", x5)
# x6
x6 = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print("x6为:", x6)

运行结果:

深度学习 1.PyTorch入门_第1张图片

2.张量的运算

  这里首先介绍最直观的运算,就是按元素运算:

代码:

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print("x为:", x)
print("y为:", y)
print("x + y:", x + y)
print("x - y:", x - y)
print("x * y:", x * y)
print("x / y:", x / y)
print("x ** y:", x**y)
print("e ** x:", torch.exp(x))

运行结果:

深度学习 1.PyTorch入门_第2张图片

  除了按元素计算外,我们还可以执行线性代数运算,包括向量点积和矩阵乘法。这个内容后文会讲到,其他的一些:

  • 我们也可以把多个张量用cat()函数连结在一起,可以指定维度dim连结;

  • 我们同样可以对两个tensor使用逻辑运算符,如==

  • sum()可以获取tensor中所有元素和;

代码:

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("X为:", X)
print("Y为:", Y)
print("按行连结为:", torch.cat((X, Y), dim=0))
print("按列连结为:", torch.cat((X, Y), dim=1))
print("X == Y:", X == Y)
print("X中的元素和:", X.sum())

运行结果:

深度学习 1.PyTorch入门_第3张图片

3.广播机制

在某些情况下,即使形状不同,我们仍然可以通过调用广播机制来执行按元素操作:

代码:

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print("\a为:", a)
print("b为:", b)
print("a + b:", a + b)

运行结果:

深度学习 1.PyTorch入门_第4张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号