PyTorch深度学习入门:张量基础与神经网络构建
1. PyTorch简介与神经网络基础
PyTorch是一个基于Python的科学计算包,主要针对两类人群:
- 替代NumPy以利用GPU的计算能力
- 提供最大灵活性和速度的深度学习研究平台
神经网络的基本构建块是神经元,每个神经元接收多个输入,对它们进行加权求和,然后通过激活函数产生输出。数学表达式为:
$$ y = f\left(\sum_i w_i x_i +b \right) $$
其中:
- $x_i$ 是输入特征
- $w_i$ 是对应的权重
- $b$ 是偏置项
- $f$ 是非线性激活函数
2. PyTorch中的张量(Tensor)
张量是PyTorch中的核心数据结构,可以看作是Numpy数组的扩展:
- 标量:0维张量
- 向量:1维张量
- 矩阵:2维张量
- 更高维数组:n维张量
PyTorch张量支持GPU加速计算,这是它与Numpy数组的主要区别之一。
2.1 创建张量
import torch
# 创建随机张量
features = torch.randn((1, 5)) # 1行5列的正态分布随机数
weights = torch.randn_like(features) # 与features相同形状的张量
bias = torch.randn((1, 1)) # 单个随机值
2.2 张量操作
PyTorch支持常见的数学运算,类似于Numpy:
# 元素级乘法
output = features * weights
# 求和
sum_result = torch.sum(output) # 或 output.sum()
# 矩阵乘法
matrix_product = torch.mm(tensor1, tensor2)
3. 构建简单神经网络
3.1 单层网络实现
def activation(x):
""" Sigmoid激活函数 """
return 1/(1+torch.exp(-x))
# 计算网络输出
y = activation(torch.sum(features * weights) + bias)
3.2 使用矩阵乘法优化
更高效的方式是使用矩阵乘法:
# 调整权重张量形状以进行矩阵乘法
y = activation(torch.mm(features, weights.view(5, 1)) + bias)
注意矩阵乘法的形状要求:第一个矩阵的列数必须等于第二个矩阵的行数。
4. 多层神经网络
真实的神经网络通常由多个层组成:
- 输入层:接收原始数据
- 隐藏层:进行特征变换
- 输出层:产生最终预测
4.1 网络结构数学表示
对于两层网络:
隐藏层输出: $$ \vec{h} = f_1(\vec{x}W_1 + B_1) $$
最终输出: $$ y = f_2(\vec{h}W_2 + B_2) $$
4.2 PyTorch实现
# 定义网络参数
n_input = features.shape[1] # 输入单元数
n_hidden = 2 # 隐藏单元数
n_output = 1 # 输出单元数
# 初始化权重和偏置
W1 = torch.randn(n_input, n_hidden)
W2 = torch.randn(n_hidden, n_output)
B1 = torch.randn((1, n_hidden))
B2 = torch.randn((1, n_output))
# 前向传播
h = activation(torch.mm(features, W1) + B1)
output = activation(torch.mm(h, W2) + B2)
5. PyTorch与Numpy互操作
PyTorch提供了与Numpy无缝转换的功能:
import numpy as np
# Numpy数组转PyTorch张量
a = np.random.rand(4, 3)
b = torch.from_numpy(a)
# PyTorch张量转Numpy数组
c = b.numpy()
注意:转换后的张量和数组共享内存,修改一个会影响另一个。
6. 总结
本文介绍了PyTorch中张量的基本概念和操作,以及如何使用PyTorch构建简单的神经网络。关键点包括:
- PyTorch张量是构建神经网络的基础数据结构
- 矩阵乘法是神经网络计算的核心操作
- 神经网络由多个层组成,每层进行线性变换后接非线性激活
- PyTorch与Numpy可以方便地相互转换
理解这些基础概念是掌握深度学习的关键第一步。在实际应用中,PyTorch提供了更高级的模块(如nn.Module
)来简化网络构建过程,但底层原理仍然是基于这些基本操作。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考