刚接触深度学习的小伙伴,是不是常听到 “前处理”“后处理” 这两个词,却搞不清它们到底是啥?别慌!今天就用大白话,带大家一步步搞懂这两个关键步骤,看完你也能入门。

一、先搞懂:啥是前处理?

简单说,前处理就是在把数据喂给模型之前,给数据 “做体检、修毛病” 的过程。就像我们做饭前要洗菜、切菜,数据不处理直接用,模型可能 “吃不下”“消化不了”,最后效果差。

新手必学的 3 个前处理操作

1.数据清洗:去掉 “坏数据”

比如做图片分类任务,数据集里可能混着模糊的图片、尺寸异常的图,甚至还有不是目标类别的图(比如要分猫和狗,却混进一张汽车图)。这些 “坏数据” 会误导模型,所以要先删掉或修正它们。

2.数据标准化 / 归一化:让数据 “站在同一水平线”

不同数据的范围差异很大,比如图片像素值是 0-255,而文本转化后的数字可能是 0-1000。模型喜欢 “稳定” 的数据,标准化会把数据变成均值为 0、标准差为 1 的样子,归一化会把数据缩到 0-1 之间,这样模型学起来更高效。

3.数据增强:给数据 “多生孩子”

如果数据太少,模型容易 “学偏”(过拟合)。比如处理图片时,我们可以给图片做旋转、翻转、裁剪,或者加一点点噪声,这样一张图能变成好几张 “新图”,数据变多了,模型也能学更扎实。

二、再明白:啥是后处理?

后处理是模型跑完出结果后,对结果 “加工、优化” 的过程。就像蛋糕烤好后,要抹奶油、摆水果,让最终效果更好。模型输出的原始结果可能有点 “粗糙”,后处理能让它更实用。

新手常见的 2 个后处理操作

1.结果过滤:去掉 “不靠谱” 的答案

比如用模型识别图片里的物体,模型可能会把 “桌子腿” 误判成 “筷子”,还给出一个很低的置信度(比如只有 20%)。这时我们可以设个阈值,比如只保留置信度超过 50% 的结果,过滤掉那些没把握的判断。

2.结果修正:让答案 “更精准”

比如用模型做文本翻译,模型可能把 “我吃饭了” 翻译成 “我吃了饭”,虽然意思对,但不够自然。这时我们可以加个简单的规则,把语序调整成更通顺的 “我已经吃过饭了”;再比如图像分割任务,模型输出的分割边界可能有点模糊,我们可以用边缘平滑算法,让边界更清晰。

三、小白必记的 2 个关键点

1.前处理是 “基础”,后处理是 “优化”:如果前处理没做好,比如数据里全是错的,再厉害的后处理也救不了;但光有好的前处理,没有后处理,结果可能没法直接用。

2.不用追求 “复杂”,适合才最重要:新手不用一上来就用各种高深的前处理算法,比如数据增强不用搞十几步,选旋转、翻转这两个简单的,效果可能就很好;后处理也不用写复杂的代码,设个置信度阈值、调个语序,就是很实用的操作。

其实前处理和后处理就像 “给数据打工”,只要搞懂 “为什么做”“做什么”,跟着例子练几次,很快就能上手。

四、前处理实例:以「图片分类」任务为例

我们用 PyTorch(新手友好的深度学习框架)和 PIL(处理图片的库),模拟给模型喂图前的完整前处理流程。

第一步:先安装需要的库

如果没装过,先在命令行执行这行代码:

pip install torch torchvision pillow  # 分别是深度学习框架、视觉工具库、图片处理库

第二步:完整前处理代码(含 3 个核心操作)

# 1. 导入需要的工具
from PIL import Image
import torch
from torchvision import transforms  # PyTorch专门的图像前处理工具
import random

# 2. 模拟加载一张图片(比如你本地的猫图,路径换成自己的)
img = Image.open("cat.jpg")  # 此时img是PIL格式的图片,尺寸可能是(宽,高,3)(3是RGB颜色通道)

# 3. 数据清洗:去掉“坏数据”(这里模拟检测异常图片)
def clean_bad_image(img):
    # 情况1:图片尺寸过小(比如小于100x100,可能是无效图)
    if img.size[0] < 100 or img.size[1] < 100:
        raise ValueError("图片尺寸太小,是坏数据!")
    # 情况2:图片不是RGB格式(比如黑白图只有1个通道,不满足模型输入)
    if img.mode != "RGB":
        img = img.convert("RGB")  # 转成RGB格式
    return img

img = clean_bad_image(img)  # 执行清洗,确保图片“合格”

# 4. 数据标准化:让像素值符合模型习惯
# 先定义标准化规则:ImageNet数据集的均值和标准差(行业常用,新手直接用)
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

# 5. 数据增强(训练时用,避免过拟合;测试时不用,保持数据真实)
def train_augmentation(img):
    # 随机旋转(-15到15度,不超过图片范围)
    img = transforms.RandomRotation(15)(img)
    # 随机水平翻转(50%概率翻转,比如猫的图片左右翻不影响分类)
    img = transforms.RandomHorizontalFlip(p=0.5)(img)
    # 统一尺寸(模型要求输入尺寸固定,比如224x224)
    img = transforms.Resize((224, 224))(img)
    # 转成Tensor(模型能识别的数字格式)
    img = transforms.ToTensor()(img)
    # 最后做标准化
    img = normalize(img)
    return img

# 6. 执行前处理(得到模型能“吃”的数据)
processed_img = train_augmentation(img)
print("前处理后的数据形状:", processed_img.shape)  # 输出 torch.Size([3, 224, 224]),符合模型输入要求

五、后处理实例:以「文本翻译」任务为例

用 Hugging Face 的transformers库(新手用它调用预训练模型超简单),模拟模型输出翻译结果后,如何优化结果。

第一步:安装库

pip install transformers torch  # transformers库含大量预训练模型

第二步:完整后处理代码(含 2 个核心操作)

# 1. 导入工具,加载预训练的翻译模型(中英翻译,模型名:Helsinki-NLP/opus-mt-zh-en)
from transformers import pipeline

# 2. 加载翻译模型(相当于“调用现成的翻译器”)
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-en")

# 3. 模拟模型输出原始结果(比如输入“我吃饭了”)
raw_input = "我吃饭了"
raw_output = translator(raw_input)[0]["translation_text"]  # 模型原始输出
print("模型原始翻译结果:", raw_output)  # 可能输出 "I ate." 或 "I have eaten."(语法对但不够自然)

# 4. 后处理1:结果修正(让翻译更通顺)
def refine_translation(raw_text):
    # 规则1:补充主语(中文常省略主语,英文需要明确)
    if raw_text.startswith("I ate") or raw_text.startswith("I have eaten"):
        raw_text = raw_text.replace("I ate", "I ate dinner")  # 补充“dinner”,明确“吃”的是饭
    # 规则2:调整时态(让语气更自然)
    if raw_text == "I ate dinner.":
        raw_text = "I have eaten dinner."  # 改成现在完成时,更符合日常表达
    return raw_text

# 5. 后处理2:结果过滤(去掉无效翻译,比如模型偶尔输出空值或乱码)
def filter_invalid_result(text):
    # 过滤空结果或太短的结果(比如只有1个单词,可能是翻译失败)
    if len(text.strip()) < 3:
        return "翻译失败,请重新输入"
    # 过滤含特殊符号的结果(比如乱码“�”)
    if "�" in text:
        return "翻译结果含乱码,请重试"
    return text

# 6. 执行后处理
refined_text = refine_translation(raw_output)
final_text = filter_invalid_result(refined_text)
print("后处理后最终翻译结果:", final_text)  # 输出 "I have eaten dinner."(自然通顺)

六、新手看代码的 3 个小提示

1.不用死记代码:先理解 “每一步要解决什么问题”(比如数据清洗是去坏数据,结果修正是让输出更自然),再对应看代码逻辑。

2.先跑通再改:把代码里的图片路径、输入文本换成自己的,先让代码跑起来,再尝试调整参数(比如数据增强时把旋转角度改成 30 度)。

3.遇到报错别慌:比如图片路径错了会报FileNotFoundError,这时检查路径是否正确;模型加载慢是因为在下载,等一会儿就好。

更多推荐