欢迎光临
我们一直在努力

Python 深度学习:PyTorch 神经网络构建

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()

深度学习架构

graph TD
    A[输入数据] --> B[输入层]
    B --> C[隐藏层 1]
    C --> D[隐藏层 2]
    D --> E[隐藏层 N]
    E --> F[输出层]
    F --> G[损失函数]
    G --> H[优化器]
    H --> I[模型更新]

损失函数

损失函数衡量模型预测与真实标签之间的差距。

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 提供了灵活的深度学习框架,支持从张量操作到模型训练的完整流程。掌握这些核心技术,对于构建深度学习应用至关重要。

在实际应用中,需要根据任务特点选择合适的网络结构和超参数,平衡模型复杂度和性能。良好的深度学习实践能够显著提高模型的准确性和训练效率。

https://segmentfault.com/a/1190000047614881

未经允许不得转载:IT极限技术分享汇 » Python 深度学习:PyTorch 神经网络构建

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址