Python速通指南:从零基础到PyTorch实战训练模型
2026/8/30 10:40:35 网站建设 项目流程

先说结论:Python 不用全部学完再进深度学习,掌握变量、容器、循环、函数、类、文件操作和 NumPy 这些核心内容,就可以开始跑 PyTorch 代码了。很多初学者把 Python 当成一门“要啃完语法书”的语言,结果在环境安装和语法细节里消耗了几个星期,最后连一个神经网络都没跑起来。这其实是学习路径出了问题。

这篇博客就是为深度学习零基础读者准备的 Python 速通指南。目标很明确:用最少的时间,把深度学习代码里最常见的 Python 写法讲清楚,并且现场示范从环境搭建到训练一个简单模型的完整过程。文章会覆盖 Python 安装、conda 虚拟环境、NumPy 数据操作、PyTorch 张量和训练循环,最后用一个小项目把整个流程串起来。

如果你是下面这类读者,这篇文章可以直接收藏:想入门深度学习但没系统学过 Python;装好了 Python 却不知道下一步干什么;看 PyTorch 官方教程时被torch.no_grad()reshapebackward()这些写法卡住;或者想用自己的电脑跑通第一个小模型,但不确定环境怎么配。以下是正文。

1. 核心能力速览

能力项说明
面向人群深度学习零基础、Python 零基础或基础薄弱者
核心内容Python 变量、容器、流程控制、函数、类、文件操作、NumPy 数据操作、PyTorch 训练循环
环境要求操作系统 Windows / Linux / macOS 均可;CPU 电脑也能完成入门;有 NVIDIA 显卡可体验 GPU 加速
需要安装Python 3.10+、Miniconda(可选)、VSCode 或 PyCharm、PyTorch
学习节奏7 到 14 天即可进入深度学习实战
最终产出用 PyTorch 训练一个简单分类/回归模型,并学会批量处理数据
不包含内容Python 高级特性、爬虫、Web 开发、Qt 界面、算法竞赛级优化
适合后续学习深度学习理论、CNN/RNN/Transformer、模型部署、批量图像处理

这里先说清楚一个边界:这篇博客不讲深度学习理论,只解决“代码能不能写出来”的问题。理论可以后面结合课程补,但代码手感必须先行。

2. 深度学习入门,为什么先补 Python

深度学习生态里,Python 是绝对的主语言。PyTorch、TensorFlow、Hugging Face Transformers、Diffusers 这些主流工具的首选接口都是 Python。你后面要学图像分类、目标检测、语音识别、大模型微调,几乎都要从 Python 代码开始。

但要注意,深度学习中用到的 Python 只占 Python 全部语法的一小部分。实际项目里高频出现的是这些:

  • 变量和基础数据类型:intfloatstrbool
  • 容器:listtupledictset
  • 流程控制:ifforwhile
  • 函数定义与调用
  • 类与对象的基础用法
  • 文件读取与保存
  • 第三方库导入:import numpy as npimport torch
  • 列表推导式、enumeratezip这类常用技巧

很多 Python 教程会花大量篇幅讲装饰器、生成器、元类、并发编程,这些对深度学习入门来说不是最紧急的。我不是说它们不重要,而是说初学者不应该被这些高级概念挡住去路。先把最常用的 20% 语法练熟,能读能写,然后立刻进入 NumPy 和 PyTorch,在实战中补漏,效率会高很多。

下面按“环境准备 -> 基础语法 -> NumPy -> PyTorch -> 实战项目”的顺序拆开讲。

3. Python 开发环境准备

3.1 安装 Python

深度学习入门阶段,建议直接安装 Python 3.10 或更高版本。去 Python 官网下载对应系统的安装包即可,也可以使用 Anaconda 或 Miniconda 统一管理。

在 Windows 上安装时,有一个关键步骤:安装界面底部记得勾选Add Python to PATH,否则后面在命令行运行python会提示找不到命令。很多初学者第一次卡住就是这里。

安装完成后,打开命令行(Windows 上是 CMD 或 PowerShell,macOS/Linux 上是 Terminal),运行:

python --version

如果输出类似Python 3.12.x,说明安装成功。如果提示找不到命令,先检查 PATH 环境变量,或者重新运行安装包并勾选 Add to PATH。

3.2 使用 conda 管理虚拟环境

深度学习项目依赖版本经常冲突,比如项目 A 需要 PyTorch 2.x,项目 B 可能锁定在 PyTorch 1.13。用 conda 为每个项目创建独立虚拟环境,是最稳妥的做法。

推荐安装 Miniconda,体积比 Anaconda 小很多。安装后,在命令行创建新环境:

conda create -n dl python=3.10

创建完成后激活环境:

conda activate dl

之后安装的所有 Python 包都会进入这个环境,不会污染系统 Python。命令行前面的(dl)提示符表明当前在dl环境中。

这里补充一个常见问题:国内访问 conda 默认源可能很慢,可以配置国内镜像源。但镜像源地址后续可能变化,建议以 conda 官方文档或你所在地区可用的稳定源为准,安装失败时优先看报错内容,不要盲目更换源。

3.3 安装 PyTorch

PyTorch 是深度学习入门最友好的框架之一。CPU 版本安装很简单:

pip install torch torchvision

如果电脑有 NVIDIA 显卡,想用 GPU 加速,需要先安装与显卡驱动匹配的 CUDA 版本。具体怎么配要看你机器上的 NVIDIA 驱动版本,建议去 PyTorch 官网首页,通过版本选择器生成对应安装命令。你可以先安装 CPU 版本跑通流程,之后再考虑 GPU 加速。

GPU 环境验证代码:

import torch # 输出 PyTorch 版本 print(torch.__version__) # 查看 CUDA 是否可用 print(torch.cuda.is_available()) # 查看 GPU 数量 print(torch.cuda.device_count())

最后一步的torch.cuda.is_available()如果输出True,说明 GPU 可用;输出False不代表代码不能跑,只是会走 CPU 推理。

3.4 安装 IDE 或编辑器

新手推荐 VSCode,免费、插件多、调试方便。也可以选 PyCharm Community 版,或者直接使用 Jupyter Notebook / Jupyter Lab,适合做实验和画图展示。

VSCode 装好后,装 Python 扩展即可。写代码时,先新建.py文件,然后选择 Python 解释器为dl环境里的那个。否则可能出现“命令行能运行但编辑器里报错导入失败”的问题。

4. Python 基础语法速通

这一节把深度学习中最高频的 Python 语法过一遍。建议每段代码都在自己电脑上敲一遍,不要只看。

4.1 变量与数据类型

Python 不需要声明变量类型,直接赋值即可。

# 数值类型 epochs = 10 learning_rate = 0.001 loss = 1.2345 # 字符串 model_name = "resnet18" # 布尔值 use_gpu = True print(epochs, learning_rate, loss, model_name, use_gpu)

这里几个变量名是刻意选的。epochslearning_rate是深度学习代码里的常见参数,写多了以后你会非常眼熟。

4.2 列表和字典

listdict是最常用的两个容器。列表用方括号,字典用花括号。

# 列表:有序、可重复 batch_sizes = [16, 32, 64, 128] first = batch_sizes[0] # 从 0 开始索引 last = batch_sizes[-1] # 负索引从末尾取 # 遍历列表 for bs in batch_sizes: print(bs) # 字典:键值对 config = { "model": "resnet18", "batch_size": 32, "lr": 0.001, "epochs": 10 } # 取值 print(config["model"]) # 遍历字典项 for key, value in config.items(): print(key, value)

深度学习代码里,字典经常用来存配置参数。你后面会看到很多config = {...}这样的写法,config["batch_size"]就是在取配置项。

4.3 流程控制

iffor是最常用的。

# if 判断 gpu_count = 1 if gpu_count > 0: print("使用 GPU 训练") elif gpu_count == 0: print("使用 CPU 训练") else: print("GPU 数量异常") # for 循环 + range for epoch in range(5): print("epoch:", epoch) # enumerate:同时取索引和值 classes = ["cat", "dog", "bird"] for idx, cls_name in enumerate(classes): print(idx, cls_name)

enumerate在深度学习训练代码里很常见,因为经常要同时知道“这是第几个 batch”和“这个 batch 的数据”。range(5)生成 0 到 4 的整数序列,是控制轮数的标准写法。

4.4 函数定义

函数是组织代码的基本单元。深度学习代码里,数据加载、模型创建、训练函数、评估函数经常被拆成一个个def

def train_one_epoch(model, data_loader, optimizer, epoch): """模拟一个训练轮次的函数""" total_loss = 0.0 for batch_idx, (inputs, labels) in enumerate(data_loader): # 这里只做示例,实际训练在后面章节展开 total_loss += 0.1 return total_loss def compute_accuracy(preds, targets): correct = (preds == targets).sum().item() total = targets.size(0) return correct / total

注意 Python 函数用缩进表示代码块,不要混用空格和 Tab。def后面需要缩进 4 个空格。

4.5 类与对象

PyTorch 中定义模型基本都用类。所以类的语法必须会一点。

class SimpleModel: def __init__(self, in_features, out_features): self.in_features = in_features self.out_features = out_features # 实际会在这里初始化神经网络层 def forward(self, x): # 前向传播逻辑 return x

__init__是构造函数,在创建对象时自动调用。self表示实例本身。后面写 PyTorch 模型时,你看到的class MyModel(nn.Module)就是这种写法的升级版。

4.6 文件操作

读取文件、保存文件是数据处理的日常操作。

# 读取文本文件 with open("config.txt", "r", encoding="utf-8") as f: content = f.read() print(content) # 写入文本文件 with open("output.txt", "w", encoding="utf-8") as f: f.write("hello deep learning")

with open(...)写法会在代码块结束后自动关闭文件,不需要手动f.close()。这个写法几乎在所有的数据处理脚本里都会出现。

4.7 列表推导式

列表推导式写法简洁,能替代很多for循环。

# 普通写法 squares = [] for i in range(10): squares.append(i * i) # 列表推导式 squares = [i * i for i in range(10)] # 带条件的列表推导式 even_squares = [i * i for i in range(10) if i % 2 == 0]

在读别人的代码时,列表推导式出现频率相当高,建议直接背下这个写法。

5. NumPy:深度学习中的数据操作基础

进入深度学习前,先花一个下午熟悉 NumPy。PyTorch 的张量(Tensor)操作和 NumPy 非常相似,学完 NumPy,再切换到 PyTorch 会非常顺。

5.1 NumPy 数组创建

import numpy as np # 一维数组 a = np.array([1, 2, 3, 4]) # 二维数组(矩阵) b = np.array([[1, 2], [3, 4]]) # 全零数组 zeros = np.zeros((2, 3)) # 全一数组 ones = np.ones((2, 3)) # 随机数组 random_arr = np.random.randn(3, 4) # 等差数组 range_arr = np.arange(0, 1, 0.1) print(a.shape, b.shape, random_arr.shape)

.shape属性是 NumPy 和 PyTorch 里最常用的属性之一,用来查看张量维度。比如(32, 3, 224, 224)表示 batch size 为 32、3 通道、高宽都是 224 的图像数据。

5.2 数组形状操作

深度学习代码里,reshapetranspose是高频操作。

x = np.arange(12) print(x.shape) # (12,) # 变成 3 行 4 列 x_reshaped = x.reshape(3, 4) # 展平为一维 x_flat = x_reshaped.flatten() # 转置 x_T = x_reshaped.T # 增加一个维度 x_expanded = np.expand_dims(x_reshaped, axis=0) print(x_expanded.shape) # (1, 3, 4)

图像数据在送入神经网络前,经常要做形状调整,比如把(H, W)变成(C, H, W),或者把一批图片堆叠成四维张量。

5.3 数组索引与切片

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 取第一行 print(arr[0, :]) # 取第一列 print(arr[:, 0]) # 取左上角 2x2 子矩阵 print(arr[:2, :2]) # 布尔索引 mask = arr > 5 print(arr[mask])

布尔索引在做数据筛选时很有用,比如过滤掉异常值、抽取特定类别的样本。

5.4 数组运算与广播

a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 逐元素运算 add = a + b mul = a * b # 矩阵乘法 m1 = np.array([[1, 2], [3, 4]]) m2 = np.array([[5, 6], [7, 8]]) matmul = m1 @ m2 # 或者 np.dot(m1, m2) # 广播机制 base = np.array([1, 2, 3]) bias = 1.0 result = base + bias # 每个元素加 1

广播是 NumPy 和 PyTorch 中一个容易误解但非常重要的机制。简单说,形状不同的数组在满足一定条件时可以做运算,标量加数组、一维数组加二维数组都属于这个范畴。

5.5 数据归一化

在训练模型之前,数据通常需要归一化。图像数据通常需要将像素值从[0, 255]缩放到[0, 1]或更小的范围。

image_data = np.random.randint(0, 256, (224, 224, 3), dtype=np.uint8) # 转 float 并归一化到 [0, 1] image_float = image_data.astype(np.float32) / 255.0 # 计算均值和标准差 mean = image_float.mean(axis=(0, 1)) std = image_float.std(axis=(0, 1)) print("mean:", mean) print("std:", std)

这种写法在准备数据集时非常常见。astype(np.float32)是为了后续送入 GPU 计算时避免数据类型不匹配。

6. PyTorch 快速上手:从张量到训练循环

PyTorch 的核心是张量(Tensor),可以理解成支持 GPU 加速、自动求导的 NumPy 数组。这一节用一个简单示例把训练流程串起来。

6.1 张量创建与 NumPy 互转

import torch import numpy as np # 从列表创建张量 a = torch.tensor([1.0, 2.0, 3.0]) # 从 NumPy 数组创建张量 np_arr = np.array([[1, 2], [3, 4]]) tensor_from_np = torch.from_numpy(np_arr) # 张量转 NumPy tensor = torch.ones(2, 3) numpy_arr = tensor.numpy() # 查看形状和数据类型 print(tensor.shape) print(tensor.dtype)

注意,PyTorch 张量和 NumPy 数组共享底层内存,某些情况下修改一个会影响另一个。转换时多留意。

6.2requires_grad与自动求导

深度学习训练靠的是反向传播,核心就是自动求导。PyTorch 用requires_grad=True标记需要计算梯度的张量。

# 需要计算梯度的标量 x = torch.tensor(3.0, requires_grad=True) # 定义一个函数 y = x^2 + 2x + 1 y = x ** 2 + 2 * x + 1 # 反向传播 y.backward() # 查看 x 的梯度:dy/dx = 2x + 2,在 x=3 时是 8 print(x.grad)

x.grad会输出tensor(8.)。这就是 PyTorch 自动求导的入门体验。在真正的训练中,模型的参数都会设置requires_grad=True,然后调用loss.backward()计算梯度,再用优化器更新参数。

6.3 用nn.Module定义模型

实际开发中不会手动写反向传播,而是用torch.nn模块。模型类继承nn.Module,在__init__里定义层,在forward里定义前向计算。

import torch.nn as nn class SimpleNN(nn.Module): def __init__(self, in_features, hidden_features, out_features): super().__init__() self.fc1 = nn.Linear(in_features, hidden_features) self.fc2 = nn.Linear(hidden_features, out_features) self.relu = nn.ReLU() def forward(self, x): x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x

这个示例是一个两层全连接网络:输入层到隐藏层,ReLU 激活,隐藏层到输出层。nn.Linear就是全连接层,nn.ReLU是激活函数。

6.4 一个完整的训练循环

下面用随机数据训练上面的模型,体验一次完整的“前向传播 -> 计算损失 -> 反向传播 -> 更新参数”流程。

import torch import torch.nn as nn import torch.optim as optim # 固定随机种子,便于复现 torch.manual_seed(42) # 随机生成 1000 个样本,每个样本 20 维特征 X = torch.randn(1000, 20) # 随机生成标签(二分类) y = torch.randint(0, 2, (1000, 1)).float() # 创建模型 model = SimpleNN(in_features=20, hidden_features=32, out_features=1) # 损失函数和优化器 criterion = nn.BCEWithLogitsLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练 20 轮 for epoch in range(20): # 前向传播 logits = model(X) loss = criterion(logits, y) # 梯度清零 optimizer.zero_grad() # 反向传播 loss.backward() # 更新参数 optimizer.step() if (epoch + 1) % 5 == 0: print(f"epoch {epoch + 1}, loss: {loss.item():.4f}")

运行后你会看到 loss 逐渐下降。optimizer.zero_grad()这一步新手经常忘记,它的作用是清空上一次反向传播留下的梯度,如果不调用,梯度会累积。

6.5 使用 DataLoader 批量加载数据

真实项目里数据量很大,不会一次性把全部数据喂给模型,而是用批量(batch)的方式。DataLoader是 PyTorch 的标准工具。

from torch.utils.data import DataLoader, TensorDataset # 模拟数据 X = torch.randn(1000, 20) y = torch.randint(0, 2, (1000, 1)).float() # 封装成 Dataset dataset = TensorDataset(X, y) # 创建 DataLoader,batch_size=64,打乱顺序 loader = DataLoader(dataset, batch_size=64, shuffle=True) for batch_idx, (batch_x, batch_y) in enumerate(loader): print(batch_idx, batch_x.shape, batch_y.shape) break

输出会显示第一个 batch 的形状是(64, 20),也就是 64 个样本,每个样本 20 维特征。shuffle=True会在每个 epoch 开始前打乱数据顺序,防止模型学到样本排列顺序。

7. 小项目实战:批量处理图像数据并训练分类模型

这一节把前面的知识点串成一个完整小项目:批量读取文件夹里的图像、做归一化、构建一个简单分类模型、训练并输出准确率。这里用模拟数据演示流程,真实项目里换成自己的图片路径即可。

7.1 项目目录结构

建议项目目录这样组织:

dl_practice/ ├── data/ │ ├── cat/ │ │ ├── cat_001.jpg │ │ └── cat_002.jpg │ └── dog/ │ ├── dog_001.jpg │ └── dog_002.jpg ├── train.py ├── dataset.py └── requirements.txt

把代码、数据、输出分开,后续管理会轻松很多。

7.2 批量读取图像并归一化

下面的代码模拟批量读取一个文件夹下所有图片,并统一缩放到相同尺寸。实际读取图片需要Pillow库,可以用pip install pillow安装。

import os from PIL import Image import numpy as np def load_images_from_folder(folder_path, target_size=(64, 64)): images = [] filenames = [] for filename in os.listdir(folder_path): if filename.lower().endswith((".jpg", ".jpeg", ".png")): filepath = os.path.join(folder_path, filename) try: img = Image.open(filepath).convert("RGB") img = img.resize(target_size) img_array = np.array(img, dtype=np.float32) / 255.0 images.append(img_array) filenames.append(filename) except Exception as e: print(f"读取失败: {filepath}, 错误: {e}") return np.stack(images), filenames

np.stack会把列表里的多个数组堆叠成一个四维数组,形状是(图片数量, 64, 64, 3)

7.3 批量读取并转换标签

假设你的目录结构是data/cat/data/dog/,每个子目录名就是类别名。

def build_dataset(data_root, target_size=(64, 64)): class_names = sorted(os.listdir(data_root)) class_to_idx = {name: idx for idx, name in enumerate(class_names)} X_list = [] y_list = [] for class_name in class_names: class_dir = os.path.join(data_root, class_name) if not os.path.isdir(class_dir): continue images, _ = load_images_from_folder(class_dir, target_size) num_samples = images.shape[0] labels = [class_to_idx[class_name]] * num_samples X_list.append(images) y_list.extend(labels) X = np.concatenate(X_list, axis=0) y = np.array(y_list) return X, y, class_names, class_to_idx

这段代码把两个类别的图片都读取出来,拼接成完整数据集。np.concatenate用来在已有维度上拼接数组。

7.4 定义模型并训练

图像数据是三维的(64, 64, 3),进入全连接网络前要先展平成一维。

import torch import torch.nn as nn import torch.optim as optim class ImageClassifier(nn.Module): def __init__(self, in_features, num_classes): super().__init__() self.net = nn.Sequential( nn.Linear(in_features, 128), nn.ReLU(), nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, num_classes) ) def forward(self, x): return self.net(x)

训练过程复用之前的模式。这里用CrossEntropyLoss,是分类任务最常见的损失函数。

# 假设 X 是 (N, 64, 64, 3),y 是 (N,) N = X.shape[0] X_flat = X.reshape(N, -1) # 展平成 (N, 64*64*3) # 转成 PyTorch 张量 X_tensor = torch.tensor(X_flat, dtype=torch.float32) y_tensor = torch.tensor(y, dtype=torch.long) # 创建 DataLoader dataset = TensorDataset(X_tensor, y_tensor) loader = DataLoader(dataset, batch_size=32, shuffle=True) # 模型、损失、优化器 model = ImageClassifier(in_features=64 * 64 * 3, num_classes=len(class_names)) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练 for epoch in range(10): total_loss = 0.0 for batch_x, batch_y in loader: optimizer.zero_grad() outputs = model(batch_x) loss = criterion(outputs, batch_y) loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(loader) print(f"epoch {epoch + 1}, loss: {avg_loss:.4f}")

如果你在自己的真实图片上运行,需要确保图片数量够多,否则模型很难收敛。这个示例的主要目的是跑通流程,验证数据批量读取、模型构建、训练循环可以串联起来。

7.5 保存与加载模型

训练结束后,把模型权重保存到磁盘,后续可以直接加载。

# 保存模型权重 torch.save(model.state_dict(), "model_weights.pth") # 加载模型权重 model = ImageClassifier(in_features=64 * 64 * 3, num_classes=len(class_names)) model.load_state_dict(torch.load("model_weights.pth")) model.eval()

model.eval()是切换为评估模式。推理时建议加上这个调用,因为某些层(如 Dropout、BatchNorm)在训练和评估时行为不同。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
安装 PyTorch 时下载缓慢网络问题或默认源慢查看 pip 下载日志使用国内可靠镜像源,或采用离线安装包
torch.cuda.is_available()返回 FalseCUDA 版本不匹配、驱动未安装、PyTorch 是 CPU 版查看nvidia-smi输出和 PyTorch 版本按官网命令重新安装匹配的 PyTorch
运行报错ModuleNotFoundError: No module named 'torch'当前环境没装 PyTorch 或解释器选错在命令行conda activate dl后检查pip list确认编辑器选择的解释器是 conda 的dl环境
报错RuntimeError: shape mismatch维度对不上,比如把二维数据送进三维要求的数据打印tensor.shape逐层检查reshapeviewtranspose调整维度
图片读取慢数据量大、未批量化查看读取耗时使用 DataLoader 批量读取,必要时增加num_workers
训练时显存不足batch size 过大或分辨率过高观察报错CUDA out of memory减小 batch size,降低分辨率,或使用梯度累积
模型 loss 一直不下降学习率不合适、数据未归一化、模型结构有误先在小数据上过拟合测试调低学习率、检查数据范围、简化模型结构
加载离线包时提示找不到本地源缺依赖或缓存路径不对查看完整报错堆栈pip install 包名先装缺的依赖

这里单独说一个很常见的问题:ModuleNotFoundError。很多初学者在 VSCode 里运行代码,结果import torch报错,但命令行里又能运行。原因是编辑器选择的 Python 解释器和命令行激活的环境不是同一个。解决办法是,VSCode 里按Ctrl+Shift+P,选择 “Python: Select Interpreter”,然后选中dl环境。

9. 最佳实践与学习建议

9.1 先跑通再深入

第一次接触深度学习代码,不要纠结每个函数的所有参数。先跑通一个最简单的示例,知道损失值在下降,模型在更新,然后再看细节。这个“跑通一次”的正反馈比看十遍教程都有效。

9.2 用小数据集做调试

写训练脚本时,先拿少量样本跑一个 epoch,确认流程没有报错,再用完整数据训练。这样可以大幅减少调试时间。比如可以在TensorDataset里只取前 32 个样本,跑通后再换成全部数据。

9.3 固定随机种子

训练结果不稳定时,先检查是否设置了随机种子。在代码开头加:

import random import numpy as np import torch random.seed(42) np.random.seed(42) torch.manual_seed(42) torch.cuda.manual_seed_all(42)

这样可以保证每次运行结果一致,方便排查问题。

9.4 代码目录规划

即使只是一个入门项目,也建议按功能拆文件:

dl_practice/ ├── config.py # 超参数配置 ├── dataset.py # 数据加载与预处理 ├── model.py # 模型定义 ├── train.py # 训练脚本 ├── inference.py # 推理脚本 └── requirements.txt # 依赖清单

这样后面扩展功能时不用在一个文件里反复翻滚。requirements.txt可以用pip freeze > requirements.txt生成。

9.5 善用 Python 官方文档和社区

遇到不认识的函数,先用help()查看:

import torch help(torch.reshape)

或者直接查看官方文档。PyTorch 官方教程里的 60 分钟入门和中文文档都比较友好,建议作为配套材料。

9.6 关于版权和数据合规

如果后续用真实图片、人脸照片、音频数据训练模型,需要确认数据来源合法,并且用途符合授权范围。涉及隐私数据时,本地处理比在线服务更可控,但仍需遵守相关法律法规和平台规定。不要收集未经授权的个人数据用于训练或发布。

10. 总结与下一步

这篇博客从环境准备开始,一路写到 Python 基础语法、NumPy 数据操作、PyTorch 张量和训练循环,最后用一个小项目把批量读取数据、训练、保存模型的完整流程串了起来。最值得记住的核心是:深度学习入门不需要学完 Python 所有语法,先把列表、字典、循环、函数、类这五样用熟,然后直接进入 PyTorch 实战,在写代码的过程中查漏补缺,学习效率最高。

下一步建议按这个路径走:

  1. 先把本文第 4 节的 Python 语法全部敲一遍,确保没有报错。
  2. 再对照第 5 节的 NumPy 示例,练习数组创建、形状修改、归一化。
  3. 然后用第 6 节的训练循环,在随机数据上跑通模型。
  4. 最后把第 7 节的小项目换成自己的数据,尝试调整参数。

最容易踩的坑是环境问题,尤其是 Python 解释器选错、PyTorch 版本和 CUDA 版本不匹配。环境配置好后,后面的代码学习会顺畅很多。

后续可以继续扩展的方向:用卷积神经网络(CNN)替换全连接网络处理图像;用torchvision.datasets加载 MNIST、CIFAR-10 等公开数据集;学习模型保存与部署,把训练好的模型导出为可调用的接口服务。如果你走到了模型部署和批量推理的阶段,这篇文章里提到的 Python 基本功和数据批量处理思路,仍然会是你的起点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询