📜  使用 PyTorch 进行深度学习 |一个介绍

📅  最后修改于: 2022-05-13 01:54:26.759000             🧑  作者: Mango

使用 PyTorch 进行深度学习 |一个介绍

PyTorch 在很多方面都表现得像我们喜欢的 Numpy 数组。毕竟,这些 Numpy 数组只是张量。 PyTorch 采用这些张量,并且可以轻松地将它们移动到 GPU 上,以便在训练神经网络时进行更快的处理。它还提供了一个自动计算梯度(用于反向传播)的模块和另一个专门用于构建神经网络的模块。总之,与 TensorFlow 和其他框架相比,PyTorch 最终使用Python和 Numpy 堆栈更加灵活。

神经网络:
深度学习基于自 1950 年代后期以来以某种形式出现的人工神经网络。这些网络由近似神经元的各个部分构成,通常称为单元或简称为“神经元”。每个单元都有一定数量的加权输入。这些加权输入相加(线性组合),然后通过激活函数得到单元的输出。
下面是一个简单的神经网络的例子。

张量:
事实证明,神经网络计算只是张量上的一堆线性代数运算,是矩阵的泛化。向量是一维张量,矩阵是二维张量,具有三个索引的数组是三维张量。神经网络的基本数据结构是张量,而 PyTorch 是围绕张量构建的。

是时候探索我们如何使用 PyTorch 构建一个简单的神经网络了。

# First, import PyTorch
import torch

定义激活函数(sigmoid)来计算线性输出

def activation(x):
    """ Sigmoid activation function 
      
        Arguments
        ---------
        x: torch.Tensor
    """
    return 1/(1 + torch.exp(-x))
# Generate some data 
# Features are 3 random normal variables
features = torch.randn((1, 5))
  
# True weights for our data, random normal variables again
weights = torch.randn_like(features)
  
# and a true bias term
bias = torch.randn((1, 1))

现在我们使用矩阵乘法计算网络的输出。

y = activation(torch.mm(features, weights.view(5, 1)) + bias)

这就是我们如何计算单个神经元的输出。当您开始将这些单独的单元堆叠成层和层堆栈,形成神经元网络时,该算法的真正威力就会出现。一层神经元的输出成为下一层的输入。对于多个输入单元和输出单元,我们现在需要将权重表示为矩阵。

我们定义神经网络的结构并初始化权重和偏差。

# Features are 3 random normal variables
features = torch.randn((1, 3))
  
# Define the size of each layer in our network
  
# Number of input units, must match number of input features
n_input = features.shape[1]     
n_hidden = 2                # Number of hidden units 
n_output = 1                # Number of output units
  
# Weights for inputs to hidden layer
W1 = torch.randn(n_input, n_hidden)
  
# Weights for hidden layer to output layer
W2 = torch.randn(n_hidden, n_output)
  
# and bias terms for hidden and output layers
B1 = torch.randn((1, n_hidden))
B2 = torch.randn((1, n_output))

现在我们可以使用权重 W1 和 W2 以及偏差 B1 和 B2 来计算这个多层网络的输出。

h = activation(torch.mm(features, W1) + B1)
output = activation(torch.mm(h, W2) + B2)
print(output)