ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python深度学习从入门到实战:环境搭建、CNN与Transformer全解析

Python深度学习从入门到实战:环境搭建、CNN与Transformer全解析 很多同学在入门深度学习时最常遇到的困扰不是“数学太难”而是“从哪开始”和“为什么这样写”。网上资料虽然多但要么偏理论推导要么直接丢一段读不懂的代码很容易让人在中途放弃。本文将围绕基于 Python 的深度学习完整学习路径从环境搭建、神经网络核心概念、CNN 和 Transformer 原理解读到一个可运行的项目实战帮你把零散知识点串联成体系。无论是准备入门的学生还是想系统补强基础的开发者这篇文章都值得收藏备用。1. 深度学习入门前先理解这几件事1.1 深度学习到底是什么深度学习是机器学习的一个子方向核心是使用“多层神经网络”来自动提取数据特征。传统机器学习方法通常需要人工设计特征比如图像分类中的边缘、纹理、颜色直方图而深度学习可以从原始像素中自动学习到不同层级的特征浅层网络学习边缘和角点深层网络学习物体部件和语义信息。之所以叫“深度”是因为网络层数足够多。一个简单的神经网络可能只有输入层、一层隐藏层和输出层而深度学习模型可以堆叠几十层甚至上千层如 ResNet、Transformer 系列。更多层数意味着更强的非线性拟合能力但也带来了训练难度、过拟合、算力消耗等问题。通俗地说深度学习就是一个“万能函数拟合器”。给它大量输入和输出样本它通过调整内部参数让预测结果不断逼近真实结果。你不需要手动告诉它规则它自己从数据中总结规律。1.2 深度学习能解决什么问题深度学习在以下几个方向表现尤其突出计算机视觉图像分类、目标检测、图像分割、人脸识别、OCR 等。自然语言处理文本分类、机器翻译、情感分析、问答系统、大语言模型。语音处理语音识别、语音合成、声纹识别。推荐系统用户行为预测、点击率预估。工业检测缺陷检测、安全帽佩戴识别、表面质量分析。无论哪个方向其底层技术都离不开神经网络而学习路径上最经典的三个模型就是全连接神经网络FNN/MLP、卷积神经网络CNN、Transformer。1.3 新手最容易陷入的误区误区一上来就啃《深度学习》花书或偏重数学推导。对于初学者建议先跑通代码再回头看理论。误区二把框架 API 当成全部。会用torch.nn.Conv2d不算懂 CNN理解卷积为什么有效更重要。误区三只跑官方示例不自己改数据和网络。这样练完很快就会忘。误区四追求模型越深越好。在小数据集上深层模型反而更容易过拟合。本篇文章会尽可能把概念、代码和运行结果放在一起讲让你每一步都能“看到”模型在做什么。2. 深度学习环境搭建Python PyTorch 安装与验证2.1 环境版本选择思路深度学习的开发环境主要涉及 Python、深度学习框架、GPU 驱动和 CUDA 等组件。不同项目对版本要求不同所以这里先给出版本选择的原则而不是固定写死一串版本号。Python建议使用 3.9 到 3.12 之间较新的稳定版本。过老的 Python 可能不支持新框架过新的版本可能部分第三方库尚未适配。深度学习框架本文以 PyTorch 为例它是目前学术界和工业界使用最广泛的框架之一调试方便资料丰富。CUDA只有使用 NVIDIA 显卡训练时才有必要安装。如果只是学习入门CPU 环境也能运行大部分示例只是训练速度较慢。2.2 使用 Anaconda 创建独立环境在实际开发中强烈建议使用虚拟环境隔离不同项目的依赖版本避免出现“A 项目需要 PyTorch 1.xB 项目需要 PyTorch 2.x”的冲突。首先安装 Anaconda 或 Miniconda然后在终端中执行conda create -n deeplearning python3.10 -y conda activate deeplearning创建环境中deeplearning是自己取的环境名称python3.10指定了解释器版本。之后所有操作都在这个环境中进行。2.3 安装 PyTorchPyTorch 官方提供根据操作系统和 CUDA 版本生成安装命令的工具。如果只是入门学习建议先安装 CPU 版本安装包更小、不会出现 CUDA 缺失问题pip install torch torchvision torchaudio如果你使用 NVIDIA 显卡可以根据官方 PyTorch 网站生成的命令安装 GPU 版本例如# 以 CUDA 12.1 为例实际请以官方生成命令为准 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里需要特别提醒GPU 版 PyTorch 必须与显卡驱动支持的 CUDA 版本兼容。如果不确定可以先在终端执行nvidia-smi查看驱动最高支持的 CUDA 版本再选择对应的 PyTorch 版本。2.4 验证环境是否安装成功在终端进入 Python 环境执行以下代码import torch print(PyTorch 版本:, torch.__version__) print(CUDA 是否可用:, torch.cuda.is_available()) print(设备数量:, torch.cuda.device_count())如果输出PyTorch 版本: 2.x.x CUDA 是否可用: False说明 CPU 环境安装成功。如果torch.cuda.is_available()为True说明 GPU 环境正常。初学者常见报错之一是ModuleNotFoundError: No module named torch这通常是因为没有激活 conda 环境或者 PyTorch 安装到了其他虚拟环境中。2.5 IDE 推荐对于初学者推荐使用 VS Code 或 PyCharm。VS Code 配合 Python 插件足够日常使用安装体积小、启动快。如果使用 Jupyter Notebook 做交互式实验也可以在 conda 环境中安装pip install jupyter jupyter notebookJupyter Notebook 对初学者非常友好可以边写代码边看到输出适合逐步理解深度学习代码的执行过程。3. 神经网络核心概念与最小实现3.1 从感知机到神经网络神经网络的基本单元是“神经元”一个神经元接收多个输入每个输入乘以对应的权重求和后加上偏置bias再经过一个激活函数输出。数学表达为y activation(w1*x1 w2*x2 ... wn*xn b)其中w是权重b是偏置activation是激活函数。多个神经元按层组织就构成了神经网络。这里对“bias”多说一句偏置相当于神经元的“阈值”它决定了神经元在什么输入下更容易被激活。没有偏置的网络决策边界必须经过原点表达能力会明显下降。3.2 激活函数的作用如果没有激活函数无论叠加多少层网络本质上还是线性变换无法处理非线性问题。激活函数的作用是引入非线性。常用激活函数Sigmoid将输出压缩到 0 到 1 之间但容易出现梯度消失。Tanh输出范围 -1 到 1梯度比 Sigmoid 好一些。ReLUmax(0, x)计算简单、收敛快是目前最常用的激活函数。Softmax用于多分类输出层将多个输出转换为概率分布。用 PyTorch 实现一个最简单的三层神经网络import torch import torch.nn as nn class SimpleNet(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super().__init__() self.fc1 nn.Linear(input_size, hidden_size) self.relu nn.ReLU() self.fc2 nn.Linear(hidden_size, num_classes) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x model SimpleNet(input_size784, hidden_size128, num_classes10) print(model)这段代码定义了一个输入维度为 784、隐藏层 128 个神经元、输出 10 类的全连接网络。784 正好是 MNIST 数据集中 28×28 图片展平后的像素数。3.3 损失函数、优化器与反向传播深度学习训练的核心循环是正向传播计算预测值计算损失预测值与真实值的差距反向传播计算梯度优化器更新参数。常用损失函数回归问题均方误差损失MSELoss。二分类二值交叉熵损失BCEWithLogitsLoss。多分类交叉熵损失CrossEntropyLoss。常用优化器SGD随机梯度下降收敛稳定但速度较慢。Adam自适应学习率收敛快是当前最常用的选择。AdamWAdam 的改进版在 Transformer 类模型中广泛使用。训练一个 batch 的代码模式import torch.optim as optim criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) # 假设 inputs 是数据labels 是标签 outputs model(inputs) loss criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step()这里特别解释一下optimizer.zero_grad()。PyTorch 会累积梯度如果不手动清零上一轮 batch 的梯度会叠加到本轮导致参数更新方向错误。这是新手最常见的 bug 之一。3.4 前馈神经网络与 BP 的关系前馈神经网络Feedforward Neural Network, FNN指信息只能从输入层流向输出层没有反馈连接。BPBackpropagation是训练前馈网络的经典算法核心是链式求导法则。你不需要手动实现 BPPyTorch 的自动求导机制会自动完成梯度计算。但理解 BP 仍然重要因为很多训练问题如梯度消失、梯度爆炸都与反向传播过程相关。简单来说梯度从输出层逐层传回输入层当网络层数很深时连续相乘可能导致梯度趋近于 0梯度消失或趋近于无穷大梯度爆炸。4. CNN 卷积神经网络图像识别的基石4.1 为什么图像任务要用卷积全连接网络处理图像有两个明显问题参数爆炸一张 256×256 的 RGB 图片展平后有 196608 个像素第一个全连接层如果有 1024 个神经元参数量就超过 2 亿。丢失空间信息展平操作破坏了像素之间的二维空间结构。CNN 通过“局部连接”和“权值共享”解决这两个问题。卷积核每次只查看图片的一小片区域并且同一个卷积核会在图片不同位置复用。这样既大幅减少了参数量又能提取局部特征。4.2 卷积层、池化层与特征图一个卷积层包含多个卷积核filter每个卷积核在输入上滑动计算点积得到一张特征图。关键参数kernel_size卷积核大小常见 3×3、5×5。stride滑动步长控制特征图尺寸缩小速度。padding边缘填充控制输出尺寸常用padding1保持尺寸不变。channels输入输出通道数。池化层的作用是降采样保留主要特征并减小计算量。最常用的是最大池化MaxPooling取区域内最大值。PyTorch 中定义一个简单的 CNNimport torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes10): super().__init__() self.conv1 nn.Conv2d(in_channels3, out_channels16, kernel_size3, padding1) self.relu1 nn.ReLU() self.pool1 nn.MaxPool2d(kernel_size2, stride2) self.conv2 nn.Conv2d(in_channels16, out_channels32, kernel_size3, padding1) self.relu2 nn.ReLU() self.pool2 nn.MaxPool2d(kernel_size2, stride2) self.fc nn.Linear(32 * 8 * 8, num_classes) def forward(self, x): x self.pool1(self.relu1(self.conv1(x))) x self.pool2(self.relu2(self.conv2(x))) x x.view(x.size(0), -1) x self.fc(x) return x # 假设输入是 3 通道、64x64 的图像 model SimpleCNN(num_classes10) print(model)输入为 3×64×64 的图片经过第一个卷积后尺寸仍为 16×64×64经过 2×2 池化后变为 16×32×32第二个卷积后为 32×32×32再池化后为 32×16×16。但上面代码中self.fc的输入维度是32*8*8对应输入为 32×32 的图片所以如果使用 64×64 输入最终展平为32*16*16。实际使用时需要根据输入尺寸调整全连接层维度或者使用nn.AdaptiveAvgPool2d自适应池化self.global_pool nn.AdaptiveAvgPool2d((1, 1))然后在forward中先全局池化再展平这样全连接层的输入维度固定为out_channels * 1 * 1不需要关心输入图片尺寸。4.3 经典 CNN 架构演化LeNet-51998 年用于手写数字识别是 CNN 的开山之作。AlexNet2012 年 ImageNet 冠军引入 ReLU 和 Dropout。VGG使用小卷积核3×3堆叠更深网络规则简单。ResNet引入残差连接解决深层网络退化问题是“深度学习可以很深”的关键突破。DenseNet、EfficientNet进一步改进特征复用和计算效率。4.4 CNN 的训练与验证以 CIFAR-10 数据集为例一个完整的训练循环如下import torch import torchvision import torchvision.transforms as transforms transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) trainset torchvision.datasets.CIFAR10(root./data, trainTrue, downloadTrue, transformtransform) trainloader torch.utils.data.DataLoader(trainset, batch_size64, shuffleTrue, num_workers2) model SimpleCNN(num_classes10) criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) for epoch in range(5): running_loss 0.0 for i, (inputs, labels) in enumerate(trainloader): optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() if i % 200 199: print(fEpoch {epoch1}, Batch {i1}, Loss: {running_loss / 200:.3f}) running_loss 0.0 print(训练完成)注意这里下载 CIFAR-10 数据集需要网络连接数据集大小约 170MB。如果网络受限可以手动下载数据集后放到./data目录。5. Transformer从注意力机制到大模型基础5.1 为什么最后是 Transformer在 Transformer 之前NLP 领域的主流是 RNN 和 LSTM。它们按顺序处理序列存在两个明显问题无法并行计算训练速度慢长距离依赖容易丢失信息。Transformer 在 2017 年由 Google 提出核心创新是“自注意力机制”Self-Attention它让每个位置的输出可以直接关注序列中所有位置的信息并且可以并行计算。近年来大语言模型如 GPT 系列几乎全部基于 Transformer 的 Decoder 结构这也就是为什么学完 CNN 后一定要掌握 Transformer。5.2 自注意力机制的关键公式自注意力机制的核心公式是Attention(Q, K, V) softmax(Q * K^T / sqrt(d_k)) * V其中QQuery当前查询向量表示“我在找什么”。KKey键向量表示“我包含什么信息”。VValue值向量表示“我实际输出的内容”。d_kK 的维度除以sqrt(d_k)是为了防止点积过大导致 Softmax 梯度消失。以“我喜欢红色苹果”为例在处理“苹果”这个词时注意力机制会计算它与“喜欢”“红色”等词的相关性将“红色”的信息聚合到“苹果”的表示中。这就是“关注”的含义。5.3 Transformer 的整体结构一个标准 Transformer 由 Encoder编码器和 Decoder解码器组成Encoder由多层自注意力 前馈网络组成用于编码输入序列。Decoder除了自注意力还包含“交叉注意力”层用于关注编码器输出。每一层都包含多头注意力Multi-Head Attention并行计算多组 Q/K/V捕捉不同子空间的特征。前馈网络Feed-Forward Network两层线性变换 ReLU。残差连接和 LayerNorm保证深层训练稳定。用 PyTorch 的nn.TransformerEncoderLayer可以快速搭建 Transformer 编码器import torch import torch.nn as nn # 核心片段定义 TransformerEncoder d_model 64 nhead 4 num_layers 2 encoder_layer nn.TransformerEncoderLayer(d_modeld_model, nheadnhead) transformer_encoder nn.TransformerEncoder(encoder_layer, num_layersnum_layers) # 输入形状: (seq_len, batch_size, d_model) src torch.rand(10, 32, d_model) out transformer_encoder(src) print(encoder 输出形状:, out.shape)注意 PyTorch 中 Transformer 的输入格式是(seq_len, batch_size, d_model)而不是常见的(batch_size, seq_len, d_model)。5.4 位置编码的意义自注意力机制本身不包含位置信息。如果把序列中的词随机打乱注意力计算结果完全一样这显然不符合语言规律。因此需要位置编码Positional Encoding把每个词的位置信息加到词向量中。原始 Transformer 使用正弦余弦函数生成位置编码后续模型如 BERT改用可学习的位置嵌入。无论哪种方式目的都是让模型感知词的先后顺序。5.5 Vision TransformerViTTransformer 不只适用于 NLP。2020 年提出的 Vision TransformerViT将图像切分成固定大小的 patch如 16×16每个 patch 展平后经过线性投影形成 token再送入标准 Transformer Encoder。ViT 在大型数据集上表现优异是目前视觉 Transformer 系列如 Swin Transformer的基础。对于图像分类入门可以先理解 CNN再对比 ViT 与 CNN 的异同。6. 项目实战从零训练一个图像分类模型6.1 项目需求与数据集选择为了把前面的知识串起来这里选择“猫狗分类”作为实战项目。网上可以找到 Kaggle 的 Dogs vs Cats 数据集也可以用 torchvision 内置的 CIFAR-10 替代猫狗分类可以看作 CIFAR-10 的简化版只需区分两个类。我们这里以 CIFAR-10 为例因为它下载方便、类别丰富方便后续扩展到多分类任务。项目目标训练一个 CNN 模型对 10 类物体图片进行分类并输出测试准确率。6.2 项目结构deeplearning_project/ ├── data/ # 数据集存放目录 ├── models.py # 网络结构定义 ├── train.py # 训练脚本 └── predict.py # 推理脚本6.3 模型文件 models.pyimport torch.nn as nn class CifarCNN(nn.Module): def __init__(self, num_classes10): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(64, 128, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2, 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 xCIFAR-10 图片尺寸为 32×32×3经过三次 2×2 最大池化后特征图尺寸为 4×4通道数为 128。6.4 训练脚本 train.pyimport torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from models import CifarCNN def main(): device torch.device(cuda if torch.cuda.is_available() else cpu) print(使用设备:, device) transform transforms.Compose([ transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) trainset torchvision.datasets.CIFAR10( root./data, trainTrue, downloadTrue, transformtransform) trainloader torch.utils.data.DataLoader( trainset, batch_size64, shuffleTrue, num_workers2) testset torchvision.datasets.CIFAR10( root./data, trainFalse, downloadTrue, transformtransform) testloader torch.utils.data.DataLoader( testset, batch_size64, shuffleFalse, num_workers2) model CifarCNN(num_classes10).to(device) criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) scheduler optim.lr_scheduler.StepLR(optimizer, step_size10, gamma0.1) for epoch in range(20): model.train() running_loss 0.0 correct 0 total 0 for inputs, labels in trainloader: inputs, labels inputs.to(device), labels.to(device) optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() _, predicted outputs.max(1) total labels.size(0) correct predicted.eq(labels).sum().item() train_acc 100.0 * correct / total print(fEpoch {epoch1}, Loss: {running_loss/len(trainloader):.4f}, Train Acc: {train_acc:.2f}%) scheduler.step() torch.save(model.state_dict(), cifar_cnn.pth) print(模型已保存到 cifar_cnn.pth) if __name__ __main__: main()这段代码包含几个实际项目中重要的设计RandomHorizontalFlip数据增强随机水平翻转图片增加数据多样性减少过拟合。num_workers2使用多线程加载数据加快训练。scheduler学习率衰减后期训练更稳定。model.train()启用 Dropout 和 BatchNorm 的训练模式。6.5 推理脚本 predict.pyimport torch from PIL import Image from torchvision import transforms from models import CifarCNN classes [飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船, 卡车] def predict(image_path): device torch.device(cuda if torch.cuda.is_available() else cpu) transform transforms.Compose([ transforms.Resize((32, 32)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) model CifarCNN(num_classes10).to(device) model.load_state_dict(torch.load(cifar_cnn.pth, map_locationdevice)) model.eval() image Image.open(image_path).convert(RGB) input_tensor transform(image).unsqueeze(0).to(device) with torch.no_grad(): outputs model(input_tensor) _, predicted outputs.max(1) print(f预测结果: {classes[predicted.item()]}) if __name__ __main__: predict(test_cat.jpg)推理阶段的关键点包括model.eval()切换到评估模式关闭 Dropout。torch.no_grad()推理阶段不需要计算梯度可以节省内存并加快速度。unsqueeze(0)为单张图片增加 batch 维度。建议在训练完成后将模型权重放在与 predict.py 同目录下再将一张测试图片命名为 test_cat.jpg 放到同目录中验证推理效果。6.6 实战中能学到什么完成这个项目后你会理解深度学习项目的完整闭环数据加载、模型定义、训练循环、验证评估、模型保存、推理部署。后续在工业项目中还需要考虑模型部署如 ONNX、TensorRT、模型压缩、分布式训练等问题但这些都建立在基础流程之上。7. 常见问题与排查思路深度学习训练过程中会遇到各种报错和异常下面整理最常见的几类问题建议收藏备用。问题现象常见原因解决思路ModuleNotFoundError: No module named torch未安装 PyTorch 或环境未切换pip list检查 torch确认 conda 环境已激活CUDA out of memory模型太大或 batch_size 太大显存不足减小 batch_size使用torch.cuda.empty_cache()或降低输入分辨率AssertionError: Torch not compiled with CUDA enabled安装的是 CPU 版 PyTorch用官方命令重新安装 GPU 版训练 loss 为 NaN学习率过大、数据中 NaN、模型梯度爆炸降低学习率检查数据归一化用torch.clamp限制梯度损失不下降学习率太低、模型结构有误、数据标签错误打印输出形状检查标签范围尝试更换优化器或调整学习率过拟合训练准确率高测试准确率低模型参数过多数据集太小缺少正则化增加数据增强、Dropout、权重衰减或使用预训练模型推理结果全部是同一个类别类别不平衡、模型未收敛、标签对齐错误检查 DataLoader 中标签与 classes 索引是否一致查看混淆矩阵7.1 排查训练无效果的通用步骤先用一个小数据集如 100 张图过拟合一个 batch确认模型能够学习。在forward函数中打印每层输出形状确认维度对齐。检查输入数据是否归一化到合理范围。检查标签是否从 0 开始连续编码。尝试用很小的学习率如 1e-4重新训练。8. 深度学习最佳实践与工程建议8.1 数据与数据加载数据质量直接决定模型上限。建议训练前先做数据可视化确认图片与标签对应关系正确检查是否有损坏图片、错误标注、类别不平衡。数据增强要结合任务场景比如医学图像不适合随机旋转车牌识别不适合水平翻转。8.2 模型设计思路第一原则先用最简模型跑通流程再逐步加深。从预训练模型开始微调而不是从头训练。图像任务优先尝试 ResNet 系列NLP 任务优先尝试 BERT 系列。不要追求“魔改”模型结构先把数据、损失函数、优化器调好。8.3 训练策略与可复现性固定随机种子在代码开头设置torch.manual_seed(42)、random.seed(42)、np.random.seed(42)保证实验可复现。使用 TensorBoard 或 wandb 记录训练曲线和指标避免“盲调”。保存模型时同时保存 optimizer 状态和训练参数方便断点续训。每个项目固定一个 conda 环境并导出requirements.txtpip freeze requirements.txt8.4 生产环境注意事项训练环境和推理环境要分开管理避免装错依赖导致线上事故。模型上线前先做单元测试用少量真实样本验证输入输出格式。如果涉及用户隐私数据训练前必须做匿名化处理并遵循合法授权要求。模型版本管理使用 DVC 或简单的时间戳命名不要只保存一个model.pth覆盖旧模型。GPU 资源是成本优先评估“是否真的需要 GPU”小数据量下 CPU 也能完成原型验证。8.5 学习深度学习的路线建议第一步掌握 Python 基础语法与 NumPy 基础。第二步理解神经网络基本概念用 PyTorch 实现全连接网络分类 MNIST。第三步学习 CNN完成 CIFAR-10 图像分类。第四步学习 Transformer理解自注意力机制跑一个文本分类或 ViT 示例。第五步选择一个真实业务场景如猫狗识别、垃圾邮件分类完成端到端项目。第六步了解模型部署ONNX、TensorRT和大模型微调LoRA等进阶方向。9. 结语深度学习入门的关键不是背公式而是动手跑通一条完整的流程装环境、读数据、建模型、训练、评估、推理。很多同学在环境搭建或第一次训练不出理想结果时就放弃了实际上这些问题大多可以通过版本检查和参数调整解决。建议先按照本文的环境配置复制跑通再逐步修改网络结构、更换数据集真正把代码变成自己的工具。如果本文对你有帮助可以先收藏备用如果在配置或运行中遇到问题欢迎在评论区留下报错信息一起讨论排查思路。
返回列表