深度学习入门:神经网络原理与 PyTorch 实战

深度学习入门:神经网络原理与 PyTorch 实战

1. 神经网络基础

复制代码
神经网络结构:
├── 输入层:接收原始特征
├── 隐藏层:提取特征(可多层)
├── 输出层:产生预测结果
└── 激活函数:引入非线性

常见激活函数:
├── Sigmoid: σ(x) = 1/(1+e^(-x)),输出 (0,1)
├── Tanh: tanh(x),输出 (-1,1)
├── ReLU: max(0,x),最常用
├── LeakyReLU: max(0.01x, x)
└── Softmax: 多分类输出概率

2. PyTorch 基础

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 创建张量
x = torch.randn(3, 4)           # 随机张量
y = torch.zeros(3, 4)           # 零张量
z = torch.ones(3, 4)            # 全 1 张量

# GPU 加速
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = x.to(device)

3. 构建神经网络

python 复制代码
import torch.nn as nn

class SimpleNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, output_size)
        )
    
    def forward(self, x):
        return self.layers(x)

# 创建模型
model = SimpleNN(784, 256, 10).to(device)
print(model)

4. 训练循环

python 复制代码
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# 数据准备
dataset = TensorDataset(X_train_tensor, y_train_tensor)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练
for epoch in range(100):
    model.train()
    total_loss = 0
    
    for batch_X, batch_y in dataloader:
        batch_X, batch_y = batch_X.to(device), batch_y.to(device)
        
        # 前向传播
        outputs = model(batch_X)
        loss = criterion(outputs, batch_y)
        
        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        total_loss += loss.item()
    
    if (epoch + 1) % 10 == 0:
        print(f"Epoch {epoch+1}, Loss: {total_loss/len(dataloader):.4f}")

5. 模型评估

python 复制代码
# 评估模式
model.eval()
with torch.no_grad():
    outputs = model(X_test_tensor.to(device))
    predictions = outputs.argmax(dim=1).cpu()
    accuracy = (predictions == y_test_tensor).float().mean()
    print(f"准确率: {accuracy:.4f}")

6. CNN 图像分类

python 复制代码
class SimpleCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 32, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
        )
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(128 * 4 * 4, 256),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(256, num_classes)
        )
    
    def forward(self, x):
        x = self.features(x)
        x = self.classifier(x)
        return x

7. 模型保存与加载

python 复制代码
# 保存
torch.save(model.state_dict(), 'model.pth')

# 加载
model = SimpleNN(784, 256, 10)
model.load_state_dict(torch.load('model.pth'))
model.eval()

总结

概念 说明
前向传播 输入 → 输出
反向传播 计算梯度
优化器 SGD/Adam/AdamW
损失函数 CrossEntropy/MSE
正则化 Dropout/BatchNorm
相关推荐
PNP Robotics16 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
_Jimmy_1 天前
AI应用开发工程师面试题库
人工智能·python·深度学习·机器学习·知识图谱
烬羽1 天前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
hongyucai1 天前
torch具身常用算子
人工智能·深度学习
林泽毅1 天前
PyTRIO快速入门(一):概念、推理与训练
人工智能·python·深度学习·机器学习·语言模型
学术小李1 天前
基于Pytorch,如何用CUDA自己写算子?(一)
人工智能·pytorch·python
橙臣程1 天前
深度学习3——数据集概述
人工智能·深度学习
其美杰布-富贵-李1 天前
P-value 到底是什么?从“原假设”到“统计显著性”的完整理解
深度学习·机器学习·统计
爱吃程序猿的喵1 天前
LingBot-Map 复现与原理剖析:基于 Geometric Context Transformer 的流式 3D 重建
人工智能·python·深度学习·计算机视觉·3d·transformer
a1117761 天前
基于PyTorch的动物图像识别系统 开源
人工智能·pytorch·python