人工智能(AI):使机器模拟人类智能的广义领域
机器学习(ML):通过数据驱动的方法让系统自动改进性能
深度学习(DL):基于多层神经网络的机器学习子领域
关系示意图:
人工智能 ⊃ 机器学习 ⊃ 深度学习
# 创建虚拟环境 conda create -n pytorch_env python=3.9 # 激活环境 conda activate pytorch_env # 安装PyTorch(根据CUDA版本选择) conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia # GPU版本 conda install pytorch torchvision torchaudio cpuonly -c pytorch # CPU版本
import torch print(torch.__version__) # 输出:2.0.1 print(torch.cuda.is_available()) # 输出:True(GPU可用时)
代码示例:张量创建与操作
# 创建张量 x = torch.empty(2, 3) # 未初始化 y = torch.zeros(2, 3, dtype=torch.int32) z = torch.randn(2, 3) # 标准正态分布 # 数学运算 a = torch.tensor([[1,2],[3,4]], dtype=torch.float32) b = torch.tensor([[5,6],[7,8]], dtype=torch.float32) print(a + b) # 逐元素加法 print(a @ b.T) # 矩阵乘法
from torchvision import transforms transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 应用到数据集 dataset = datasets.CIFAR10(..., transform=transform)
# 矩阵分解 A = torch.randn(3, 3) U, S, V = torch.svd(A) # 奇异值分解 # 特征值计算 eigenvalues = torch.linalg.eigvalsh(A) # 张量缩并 tensor = torch.einsum('ijk,jl->ikl', a, b)
wi:权重
b:偏置(提供平移能力)
f:激活函数
代码示例:单神经元实现
class Neuron(nn.Module): def __init__(self, input_dim): super().__init__() self.linear = nn.Linear(input_dim, 1) self.activation = nn.Sigmoid() def forward(self, x): return self.activation(self.linear(x)) neuron = Neuron(3) output = neuron(torch.tensor([0.5, -1.2, 0.8]))
model = nn.Sequential( nn.Linear(784, 128), nn.ReLU(), nn.Linear(128, 10) ) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(10): for inputs, labels in train_loader: optimizer.zero_grad() outputs = model(inputs.view(-1, 784)) loss = criterion(outputs, labels) loss.backward() optimizer.step() print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')
链式法则示例:
其中 z=∑wixi+b,y=f(z)
代码示例:手动实现反向传播
x = torch.tensor(2.0, requires_grad=True) y = torch.tensor(3.0) w = torch.tensor(1.0, requires_grad=True) b = torch.tensor(0.5, requires_grad=True) # 前向计算 z = w * x + b loss = (z - y)**2 # 反向传播 loss.backward() print(w.grad) # 输出:4.0 (∂loss/∂w = 2*(wx + b - y)*x = 2*(2+0.5-3)*2 = 4)
注:本文代码基于PyTorch 2.0+版本实现,运行前需安装:
pip install torch torchvision matplotlib
更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。