6 神经网络基础之训练与测试神经网络
系列进度
神经网络后门攻击 · 第 6 / 21 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
神经网络后门内容应从风险识别和防御验证角度理解,重点是知道问题如何被发现和控制。阅读时可以按「训练神经网络 -> 测试神经网络 -> 威胁模型 -> 触发条件」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「训练神经网络」,再查「测试神经网络」。
在上篇中,我们讨论了神经网络的基本架构,包括层的类型和它们的功能。在这一篇中,我们将深入探讨如何训练和测试神经网络,这是构建有效模型的关键步骤。训练神经网络的目标是让模型学习输入数据的模式并进行有效的预测,而测试则是评估该模型在未知数据上的性能。
训练神经网络
训练神经网络的过程通常涉及以下几个步骤:
训练和测试神经网络时,先看数据来源、触发样本、评估集覆盖和异常输出。后门风险常被正常指标掩盖。
-
数据准备:首先,我们需要收集和准备训练数据。这些数据应该能代表我们希望模型学习的特征。例如,如果我们要使用神经网络进行手写数字识别,我们需要一个包含各种手写数字的图像数据集,如MNIST。
-
定义损失函数:损失函数是用于评估模型在训练数据上的表现的指标。常见的损失函数有交叉熵损失(用于分类问题)和均方误差(用于回归问题)。
对于多分类问题,我们使用交叉熵损失:
其中,是分类数,是真实标签,是预测值。
选择优化算法:优化算法用于更新神经网络的权重,以最小化损失函数。常见的优化算法包括随机梯度下降(SGD)、Adam和RMSprop等。
训练过程:通过反向传播算法计算损失函数相对于网络权重的梯度,并通过优化算法更新权重。一个完整的训练循环通常包括多个“epoch”,每个“epoch”会遍历整个训练数据集。
以下是一个使用PyTorch框架训练简单神经网络的示例代码:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# 定义简单的神经网络
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = x.view(-1, 28 * 28)
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 数据加载
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('./data', train=True, download=True,
transform=transforms.ToTensor()), batch_size=64, shuffle=True)
# 初始化模型、损失函数和优化器
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters())
# 训练循环
for epoch in range(5): # 训练5个epoch
for data, target in train_loader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
print(f'Epoch {epoch + 1}, Loss: {loss.item()}')
测试神经网络
在完成训练后,我们需要对模型进行测试,以验证其性能。测试过程通常包括以下几个步骤:
学习《神经网络基础之训练与测试神经网络》不必一口气吃完所有细节。先挑一个能动手验证的小问题,再顺着图和正文补齐概念。
-
准备测试数据:测试数据集应与训练数据集是独立的,确保模型的泛化能力。
-
模型评估:使用测试数据预测结果,并计算准确率、召回率等指标。对于分类问题,我们通常使用分类准确率作为评估指标。
准确率的计算为:
以下是使用
PyTorch进行模型测试的示例代码:# 加载测试数据 test_loader = torch.utils.data.DataLoader( datasets.MNIST('./data', train=False, transform=transforms.ToTensor()), batch_size=64, shuffle=False) # 测试模型 model.eval() # 设置模型为评估模式 correct = 0 total = 0 with torch.no_grad(): # 不需要计算梯度 for data, target in test_loader: output = model(data) _, predicted = torch.max(output, 1) total += target.size(0) correct += (predicted == target).sum().item() print(f'Test Accuracy: {100 * correct / total:.2f}%')
学完《神经网络基础之训练与测试神经网络》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《神经网络基础之训练与测试神经网络》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
小结
在这一篇中,我们讨论了神经网络的训练与测试,学习如何准备数据、定义损失函数、选择优化算法,并通过示例代码演示了如何实现训练和评估流程。在下一篇中,我们将进一步探讨后门攻击的相关内容,了解后门攻击的定义和对神经网络的潜在威胁。通过这些知识,我们可以更好地理解如何保护神经网络模型,提升其安全性。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
神经网络基础之训练与测试神经网络适合谁读?
这是 神经网络后门攻击 系列第 6 / 21 篇,适合正在学习神经网络后门攻击,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇神经网络后门攻击教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读