深度学习入门零基础笔记|Python+理论+PyTorch实战

标签:深度学习入门、PyTorch基础、机器学习理论、零基础自学笔记、AI入门
简介:本文整合 Python 基础、神经网络核心理论、PyTorch 框架实操三大板块,从零搭建完整知识体系。所有代码带详细注释,知识点扎实全面、可直接运行,适合零基础学习者筑牢根基,为后续 CV、NLP、大模型学习铺路。


目录

  1. 前言
  2. 第一部分 Python 深度学习必备基础
  3. 第二部分 神经网络核心理论精讲
  4. 第三部分 PyTorch 框架完整入门实操
  5. 第四部分 模型训练通用标准流程
  6. 第五部分 入门常见问题与避坑总结
  7. 优质配套学习资源推荐

一、前言

深度学习入门讲究 先基础、再理论、后代码,跳过基础直接上手模型极易出现概念模糊、代码报错、看不懂网络结构等问题。


二、第一部分 Python 深度学习必备基础

2.1 Python 语言定位与核心特点

Python 是深度学习唯一主流开发语言,PyTorch、TensorFlow、OpenCV 等框架均以 Python 为前端接口。

  1. 解释型语言,无需编译,编写即运行
  2. 动态类型变量,无需提前声明数据类型
  3. 语法简洁优雅,缩进划分代码块
  4. 海量科学计算、可视化、AI 第三方库

2.2 基础数据类型与变量

2.2.1 常用基础类型

# 整型:整数
int_num = 10
# 浮点型:小数
float_num = 3.14
# 字符串:文本
str_text = "AI学习"
# 布尔型:True/False
bool_flag = False

2.2.2 强制类型转换

# 字符串转整数
int("666")
# 字符串转浮点数
float("9.9")
# 数字转字符串
str(123)
# 数字转布尔值(0为False,非0为True)
bool(0)

2.3 四大容器类型(深度学习高频使用)

列表 list(最常用)

有序可变数组,支持增删改查,存放批量数据

# 定义列表
lst = [1, 2, 3, "深度学习"]
# 末尾添加元素
lst.append(5)
# 修改第0个位置的值
lst[0] = 99
# 删除第1个位置的元素
del lst[1]

元组 tuple

有序不可变,用于固定数据

# 定义元组,元素不能修改
tup = (10, 20, 30)

字典 dict

键值对结构,存储映射关系

# 键:值 形式
dic = {"name": "模型", "lr": 0.001}

集合 set

自动去重,用于数据去重与集合运算

# 重复元素会自动合并
s = {1, 2, 2, 3}

2.4 流程控制语句

条件判断

score = 88
# 如果分数大于等于90
if score >= 90:
    print("优秀")
# 否则如果大于等于60
elif score >= 60:
    print("及格")
# 其他情况
else:
    print("不及格")

循环语句

# for 循环:循环 5 次
for i in range(5):
    print(i)

# while 循环:条件满足就循环
n = 0
while n < 3:
    n += 1  # 每次+1

控制关键字

  • break:终止整个循环
  • continue:跳过本次循环
  • pass:占位,不执行任何操作

2.5 函数与面向对象基础

自定义函数

封装重复代码,简化调用

# 定义加法函数
def add(a, b):
    return a + b  # 返回结果

# 调用函数
res = add(2, 3)

类与对象

网络模型、数据集均基于类封装

# 定义一个网络类
class Net:
    # 初始化方法
    def __init__(self):
        self.name = "基础网络"  # 属性

    # 前向传播方法(占位)
    def forward(self):
        pass

2.6 深度学习两大核心第三方库

2.6.1 NumPy 数值计算库

多维数组运算,PyTorch 张量底层原型

# 导入numpy库
import numpy as np

# 创建二维数组
arr = np.array([[1, 2], [3, 4]])
# 查看形状(行,列)
print(arr.shape)
# 数组求和
print(arr.sum())

2.6.2 Matplotlib 可视化库

绘制损失曲线、图像、数据分布图

# 导入绘图库
import matplotlib.pyplot as plt
# 生成0-10之间的50个点
x = np.linspace(0, 10, 50)
# 计算正弦值
y = np.sin(x)
# 绘图
plt.plot(x, y)
# 显示图片
plt.show()

三、第二部分 神经网络核心理论精讲

3.1 神经网络整体结构

基础三层结构:输入层 → 隐藏层 → 输出层

  • 输入层:接收原始图像、文本、表格数据
  • 隐藏层:多层特征提取、非线性变换
  • 输出层:输出分类类别、回归预测数值

深度学习 = 多层堆叠神经网络,依靠多层变换拟合现实复杂规律。

3.2 张量 Tensor 核心基础

3.2.1 张量层级划分

张量是深度学习统一数据载体,本质是多维数组:

  • 0 维张量:标量,单个数字
  • 1 维张量:向量,一维数组
  • 2 维张量:矩阵,二维数组
  • 3 维及以上:高阶张量,图像、批量数据

3.2.2 张量四大核心属性

  1. shape:维度形状,判断数据结构
  2. dtype:数据类型,浮点/整型
  3. device:存储设备,CPU/GPU
  4. requires_grad:是否开启梯度计算,用于模型训练

3.3 前向传播 Forward

数据从输入层单向传递至输出层,得到预测结果。

通用计算流程

  1. 输入数据进入网络
  2. 加权求和:Z=XW+bZ=XW+bZ=XW+b
  3. 激活函数非线性处理
  4. 逐层传递,最终输出预测值

单层隐藏层公式

Z1=XW1+b1Z_1=XW_1+b_1Z1=XW1+b1
A1=f(Z1)A_1=f(Z_1)A1=f(Z1)
Z2=A1W2+b2Z_2=A_1W_2+b_2Z2=A1W2+b2
y^=g(Z2)\hat y=g(Z_2)y^=g(Z2)

核心作用:生成预测结果,为计算损失提供依据。

3.4 反向传播 Backward

模型学习的核心机制,误差反向传递更新参数。

完整流程

  1. 对比预测值与真实标签,计算损失
  2. 链式法则反向传导误差
  3. 求解权重、偏置梯度
  4. 梯度下降更新网络参数,降低整体损失

核心作用:让模型不断学习优化,提升预测准确度。

3.5 五大常用激活函数

作用:引入非线性,多层网络才可拟合复杂数据规律

激活函数 公式 优点 缺点 适用场景
Sigmoid σ(x)=11+e−x\sigma(x)=\dfrac{1}{1+e^{-x}}σ(x)=1+ex1 输出 0~1,表征概率 梯度消失、非零中心化 二分类输出层
Tanh tanh⁡(x)=ex−e−xex+e−x\tanh(x)=\dfrac{e^x-e^{-x}}{e^x+e^{-x}}tanh(x)=ex+exexex 零中心化,收敛更快 梯度消失 浅层隐藏层
ReLU f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x) 计算简单、缓解梯度消失 神经元死亡 绝大多数隐藏层
Leaky ReLU f(x)=max(ax,x)f(x)=max(ax,x)f(x)=max(ax,x) 解决神经元死亡 效果波动 ReLU 优化替换
Softmax σ(zi)=ezi∑ezj\sigma(z_i)=\dfrac{e^{z_i}}{\sum e^{z_j}}σ(zi)=ezjezi 输出概率和为 1 计算量大 多分类输出层

3.6 损失函数 Loss Function

衡量预测值和真实值差距,反向传播计算起点。

3.6.1 回归任务(预测连续数值)

  1. 均方误差 MSE:对异常值敏感,梯度平滑
    L=1n∑(y^i−yi)2L=\dfrac{1}{n}\sum(\hat y_i-y_i)^2L=n1(y^iyi)2
  2. 平均绝对误差 MAE:抗干扰性强

3.6.2 分类任务(预测离散类别)

  1. 二元交叉熵 BCE:搭配 Sigmoid 二分类
  2. 交叉熵 CrossEntropy:自带 Softmax,标准多分类损失

3.7 优化器 Optimizer

根据梯度更新参数,推动损失持续下降:

  1. SGD 随机梯度下降:基础算法,小批量训练最常用
  2. Momentum 动量梯度:加速收敛,减少震荡
  3. RMSprop:自适应学习率,适配复杂数据
  4. Adam:融合动量与自适应学习,入门首选优化器

3.8 机器学习基础分类

  1. 监督学习:带标签数据,回归、分类任务
  2. 无监督学习:无标签数据,聚类、降维

3.9 模型拟合与数据集划分

数据集划分比例

训练集 60%~70%、验证集 15%~20%、测试集 15%~20%

拟合问题

  • 过拟合:训练效果极好,测试效果极差
    解决:扩充数据、正则化、Dropout、提前停止训练
  • 欠拟合:训练、测试效果均较差
    解决:增加网络层数、提升模型复杂度

3.10 经典理论定理

  1. NFL 无免费午餐定理:不存在万能最优算法
  2. 偏差方差权衡:平衡拟合能力与泛化能力
  3. 评估指标
    分类:准确率、精确率、召回率、F1、AUC
    回归:MSE、RMSE、MAE、R2R^2R2

四、第三部分 PyTorch 框架完整入门实操

4.1 框架简介

PyTorch 动态图机制,调试简单、上手轻松,科研、工业项目通用主流框架。

4.2 环境安装命令

# CPU版本(清华源加速)
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

# GPU版本(需安装CUDA)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

4.3 安装验证

# 导入torch
import torch

# 查看版本
print(torch.__version__)
# 查看GPU是否可用
print(torch.cuda.is_available())

4.4 张量创建与基础操作

import torch

# 从列表创建张量
t1 = torch.tensor([1, 2, 3])
# 创建2行3列全0张量
t2 = torch.zeros(2, 3)
# 创建3行3列随机张量
t3 = torch.rand(3, 3)

# numpy转张量
import numpy as np
arr = np.array([1, 2])
t4 = torch.from_numpy(arr)

# 改变形状
t1.reshape(3, 1)
# 转到CPU
t1.cpu()
# 转到GPU
t1.to("cuda")

4.5 Autograd 自动微分

无需手动求导,框架自动计算梯度

# 定义张量,开启梯度计算
x = torch.tensor(2.0, requires_grad=True)
# 构建计算图
y = x**2 + 3*x
# 反向传播,计算梯度
y.backward()
# 打印x的梯度
print(x.grad)

核心函数:

  • requires_grad=True:开启梯度
  • backward():反向求导
  • zero_grad():清空梯度

4.6 神经网络核心模块 nn.Module

4.6.1 常用网络层

import torch.nn as nn

# 线性层:输入10维,输出5维
linear = nn.Linear(10, 5)
# ReLU激活函数
relu = nn.ReLU()
# 交叉熵损失(多分类)
loss_fn = nn.CrossEntropyLoss()
# Adam优化器
opt = torch.optim.Adam(linear.parameters(), lr=0.001)

4.6.2 自定义网络模型

固定模板:初始化定义层 + forward 定义前向传播

import torch
import torch.nn as nn

# 定义简单网络,继承nn.Module
class SimpleNet(nn.Module):
    # 初始化:输入维度、隐藏维度、输出维度
    def __init__(self, in_dim, hid_dim, out_dim):
        super().__init__()  # 继承父类初始化
        
        # 第一层线性层
        self.fc1 = nn.Linear(in_dim, hid_dim)
        # 激活函数
        self.relu = nn.ReLU()
        # 第二层线性层
        self.fc2 = nn.Linear(hid_dim, out_dim)

    # 前向传播
    def forward(self, x):
        x = self.relu(self.fc1(x))  # 第一层+激活
        x = self.fc2(x)             # 第二层
        return x                   # 返回结果

# 创建模型实例
model = SimpleNet(10, 20, 2)

4.7 数据集加载 Dataset + DataLoader

from torch.utils.data import Dataset, DataLoader

# 自定义数据集类
class MyData(Dataset):
    # 初始化:传入数据和标签
    def __init__(self, data, label):
        self.data = data
        self.label = label

    # 数据集长度
    def __len__(self):
        return len(self.data)

    # 根据索引取数据
    def __getitem__(self, idx):
        return self.data[idx], self.label[idx]

# 构建数据集
dataset = MyData(x, y)
# 数据加载器:批次32,打乱顺序
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

五、第四部分 模型训练通用标准流程

这套模板所有深度学习项目都能直接套用!

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, Dataset

# ===================== 1. 构建数据集 =====================
class TrainData(Dataset):
    def __init__(self):
        # 随机生成1000个样本,每个样本10维
        self.x = torch.randn(1000, 10)
        # 随机生成0/1标签(二分类)
        self.y = torch.randint(0, 2, (1000,))

    # 数据集长度
    def __len__(self):
        return len(self.x)

    # 根据索引取一组数据
    def __getitem__(self, idx):
        return self.x[idx], self.y[idx]

# 实例化数据集
train_data = TrainData()
# 构建加载器:批次32,打乱
train_loader = DataLoader(train_data, 32, True)

# ===================== 2. 搭建模型 =====================
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        # 快速搭建网络:线性层+激活+线性层
        self.layer = nn.Sequential(
            nn.Linear(10, 20),   # 输入10 → 隐藏20
            nn.ReLU(),           # 激活
            nn.Linear(20, 2)     # 输出2分类
        )

    # 前向传播
    def forward(self, x):
        return self.layer(x)

# 实例化模型
model = Net()
# 损失函数:多分类交叉熵
loss_func = nn.CrossEntropyLoss()
# 优化器:Adam,学习率0.001
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# ===================== 3. 开始训练 =====================
# 训练10轮
for epoch in range(10):
    total_loss = 0  # 累计损失
    
    # 遍历每一批数据
    for data, label in train_loader:
        optimizer.zero_grad()   # 梯度清零(必须)
        pred = model(data)      # 前向传播,得到预测值
        loss = loss_func(pred, label)  # 计算损失
        loss.backward()         # 反向传播,计算梯度
        optimizer.step()        # 更新参数
        total_loss += loss.item()  # 累加损失
    
    # 打印每轮平均损失
    print(f"轮次 {epoch+1} 平均损失:{total_loss/len(train_loader):.4f}")

5.1 模型保存与加载

# 仅保存模型参数(推荐,体积小)
torch.save(model.state_dict(), "params.pth")

# 加载参数
model.load_state_dict(torch.load("params.pth"))

5.2 GPU 加速训练通用写法

# 自动判断是否使用GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 模型移到GPU/CPU
model = model.to(device)

# 每一批数据也移到设备
for data, label in train_loader:
    data, label = data.to(device), label.to(device)

六、第五部分 入门常见问题与避坑总结

  1. 梯度不清零:模型无法收敛,训练必须写 zero_grad()
  2. 数据与模型设备不统一:CPU → GPU 直接报错
  3. 激活函数乱用:多分类输出层必须用 Softmax
  4. 维度不匹配:输入维度与网络层必须对应
  5. 过拟合过早优化:先加数据,再用正则、Dropout

七、优质配套学习资源推荐

7.1 理论学习

  1. 吴恩达深度学习课程:零基础入门首选
  2. 周志华《机器学习》西瓜书:夯实底层理论

7.2 Python 基础

菜鸟教程 Python3:快速查阅语法,零基础速成

7.3 PyTorch 实操

  1. B 站小土堆 PyTorch 教程:手把手代码实操
  2. PyTorch 官方文档:权威 API 查询

文末总结

本篇笔记覆盖 Python 语法、机器学习理论、神经网络核心、PyTorch 代码实操、标准训练流程 四大入门核心板块。
所有代码均带逐行详细注释,逻辑连贯、可直接复制运行。

零基础学习者按照顺序逐段理解、动手敲写代码,完全吃透后即可具备:

  • 简单网络搭建
  • 标准模型训练
  • 数据集处理
  • 损失/优化器使用
  • GPU 训练

无缝衔接 CNN、RNN、Transformer、大模型微调 等进阶内容,稳固打好深度学习入门根基。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐