Python 深度学习:PyTorch 神经网络构建
深度学习是机器学习的前沿领域,PyTorch 是最受欢迎的深度学习框架之一。本文将深入探讨 PyTorch 的神经网络构建技术,包括张量操作、自动微分、模型训练等核心技术。
张量基础
张量是 PyTorch 的基本数据结构,类似于 NumPy 数组但支持 GPU 加速。
import torch
def tensor_basic_demo():
print("张量基础演示:")
x = torch.tensor([1, 2, 3, 4])
print(f"张量: {x}")
print(f"张量类型: {x.dtype}")
print(f"张量设备: {x.device}")
y = torch.randn(2, 3)
print(f"随机张量:/n{y}")
tensor_basic_demo()
自动微分
自动微分自动计算梯度,是神经网络训练的核心。
def autograd_demo():
print("自动微分演示:")
x = torch.tensor([2.0], requires_grad=True)
y = x ** 2 + 3 * x + 1
y.backward()
print(f"x: {x.item()}")
print(f"y: {y.item()}")
print(f"dy/dx: {x.grad.item()}")
autograd_demo()
神经网络层
神经网络层构建深度学习模型的基本组件。
import torch.nn as nn
def neural_network_layers_demo():
print("神经网络层演示:")
print("1. 全连接层")
fc = nn.Linear(10, 5)
print(f"全连接层: {fc}")
print("2. 卷积层")
conv = nn.Conv2d(3, 64, kernel_size=3)
print(f"卷积层: {conv}")
print("3. 池化层")
pool = nn.MaxPool2d(kernel_size=2)
print(f"池化层: {pool}")
neural_network_layers_demo()
激活函数
激活函数引入非线性,使神经网络能够学习复杂模式。
def activation_functions_demo():
print("激活函数演示:")
x = torch.linspace(-5, 5, 100)
relu = nn.ReLU()
sigmoid = nn.Sigmoid()
tanh = nn.Tanh()
print(f"ReLU 输出范围: {relu(x).min():.2f} 到 {relu(x).max():.2f}")
print(f"Sigmoid 输出范围: {sigmoid(x).min():.2f} 到 {sigmoid(x).max():.2f}")
print(f"Tanh 输出范围: {tanh(x).min():.2f} 到 {tanh(x).max():.2f}")
activation_functions_demo()
深度学习架构
损失函数
损失函数衡量模型预测与真实标签之间的差距。
def loss_functions_demo():
print("损失函数演示:")
print("1. 均方误差损失")
mse_loss = nn.MSELoss()
print("2. 交叉熵损失")
ce_loss = nn.CrossEntropyLoss()
print("3. 二元交叉熵损失")
bce_loss = nn.BCEWithLogitsLoss()
loss_functions_demo()
优化器
优化器根据梯度更新模型参数。
def optimizer_demo():
print("优化器演示:")
model = nn.Linear(10, 2)
print("1. SGD 优化器")
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
print("2. Adam 优化器")
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
print("3. RMSprop 优化器")
optimizer = torch.optim.RMSprop(model.parameters(), lr=0.001)
optimizer_demo()
模型训练
模型训练使用数据迭代更新模型参数。
def model_training_demo():
print("模型训练演示:")
model = nn.Sequential(
nn.Linear(10, 50),
nn.ReLU(),
nn.Linear(50, 2)
)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
X = torch.randn(100, 10)
y = torch.randint(0, 2, (100,))
for epoch in range(10):
optimizer.zero_grad()
outputs = model(X)
loss = criterion(outputs, y)
loss.backward()
optimizer.step()
if (epoch + 1) % 2 == 0:
print(f'Epoch [{epoch+1}/10], Loss: {loss.item():.4f}')
model_training_demo()
数据加载
数据加载高效地加载和预处理训练数据。
from torch.utils.data import Dataset, DataLoader
class CustomDataset(Dataset):
def __init__(self, X, y):
self.X = X
self.y = y
def __len__(self):
return len(self.X)
def __getitem__(self, idx):
return self.X[idx], self.y[idx]
def data_loading_demo():
print("数据加载演示:")
X = torch.randn(1000, 10)
y = torch.randint(0, 2, (1000,))
dataset = CustomDataset(X, y)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
for batch_X, batch_y in dataloader:
print(f"批次形状: {batch_X.shape}, {batch_y.shape}")
break
data_loading_demo()
模型评估
模型评估使用测试数据衡量模型性能。
def model_evaluation_demo():
print("模型评估演示:")
model.eval()
with torch.no_grad():
outputs = model(X)
_, predicted = torch.max(outputs, 1)
accuracy = (predicted == y).float().mean()
print(f"准确率: {accuracy.item():.4f}")
model_evaluation_demo()
模型保存与加载
模型保存与加载持久化训练好的模型。
def model_save_load_demo():
print("模型保存与加载演示:")
model = nn.Linear(10, 2)
torch.save(model.state_dict(), 'model.pth')
loaded_model = nn.Linear(10, 2)
loaded_model.load_state_dict(torch.load('model.pth'))
print("模型已保存和加载")
model_save_load_demo()
GPU 加速
GPU 加速显著提高训练速度。
def gpu_acceleration_demo():
print("GPU 加速演示:")
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"使用设备: {device}")
model = nn.Linear(10, 2).to(device)
X = torch.randn(100, 10).to(device)
outputs = model(X)
print(f"输出设备: {outputs.device}")
gpu_acceleration_demo()
总结
PyTorch 提供了灵活的深度学习框架,支持从张量操作到模型训练的完整流程。掌握这些核心技术,对于构建深度学习应用至关重要。
在实际应用中,需要根据任务特点选择合适的网络结构和超参数,平衡模型复杂度和性能。良好的深度学习实践能够显著提高模型的准确性和训练效率。
IT极限技术分享汇