深度学习知识点概念速通——人工智能专业考试基础知识点

概念题

残差网络通过引入"跳跃连接"(Skip Connection)有效地解决了深层网络训练困难的问题。这种结构主要缓解了梯度消失/退化 问题。

在机器学习模型评估中,当分类模型对多数类别预测准确率很高,但对少数类别预测效果很差时,使用F1分数 指标可能更能反映模型的整体性能。

神经网络的训练过程通常包括前向传播 计算损失和 反向传播 更新参数两个主要阶段。

在神经网络中,若隐藏层的激活函数全部使用线性函数,无论网络有多少层,该神经网络的表达能力等同于单层感知机

对于一个序列到序列的任务,编码器(Encoder) 通常将输入序列编码成一个固定维度的上下文向量(Context Vector),这个向量再输入到解码器 中生成输出序列。

在序列模型中,为了解决RNN难以并行计算的问题,CNN及Transformer 架构被提出并广泛应用。

卷积神经网络(CNN)中,通常使用最大池化 操作来降低特征图的空间维度,并增加模型对平移等微小变化的鲁棒性。

在图像识别任务中,一个典型的CNN网络可能包含多个卷积层、池化层、激活层, 最后接全连接层 进行分类。

深度强化学习(Deep Reinforcement Learning)中,智能体(Agent)通过与环境交互来学习策略,其目标是最大化预期的累积奖励。

假设一个分类任务有10个类别,输出层通常使用Softmax 函数将输出转换为概率分布。

在卷积神经网络中,1x1卷积(Pointwise Convolution)的主要作用包括增加非线性和改变特征图的通道数。

在图像分类任务中,VGGNet 网络结构通常被认为是最具深度和性能优势的卷积神经网络架构

Keras、PyTorch、TensorFlow是常见的深度学习框架。

Dropout 是一种常用的正则化技术 ,它在训练过程中以一定的概率随机"丢弃"神经元。在测试阶段,通常需要将神经元的输出乘以保留概率(或在训练时除以保留概率)以保持期望一致。

在自然语言处理任务中,Word2Vec模型的主要目标是学习到词向量 ,使得语义相似的词在向量空间中具有相似的距离 的表示。

Transformer模型的核心组件是自注意力 机制,它通过计算Query、Key和Value之间的相互作用来捕捉依赖关系。

在自动编码器中,编码器将输入压缩为低维表示 ,解码器尝试从低维表示重构输入 。如果隐藏层节点数多于输入层节点数 ,且没有其他约束,模型容易学习到恒等映射

优化算法Adam中,参数m表示梯度的指数加权平均(不仅包含梯度的方向,还包含梯度的大小),用于累积过去的指数加权平均的 梯度,参数v表示用于加速梯度和平方梯度估计的二阶矩估计

v的标准术语是 "梯度的二阶矩估计",而二阶矩在梯度均值近似为 0 时,可等价于 "方差",因此 "方差" 是对v的简化描述(但 "二阶矩估计" 是更准确的术语)。

批归一化(Batch Normalization)通常在每个批次的数据上对神经网络的隐藏层 进行归一化处理。

生成对抗网络(GAN)的训练过程是一个非零和 对抗的过程,生成器和判别器相互促进提升。通过对抗最终达成纳什均衡------ 生成器能生成逼真样本,判别器难以区分真假,此时双方都达成了相对最优的状态(并非一方完全损失)。

在计算损失函数关于某个参数的梯度时,反向传播算法利用了链式定理

深度学习框架TensorFlow和PyTorch提供了强大的计算图和自动微分机制 ,使得构建和训练复杂的深度学习模型变得更加方便。

相比于传统的梯度下降算法,随机梯度下降在训练大规模数据集时的主要优势是计算效率高,每次更新仅需处理一个或一小批样本 。

深度学习中,为了打破网络的对称性,权重参数通常不能初始化为0。

生成对抗网络由生成器和判别器两部分组成,其中生成器的目标是**生成尽可能逼真的数据样本以"欺骗判别器"。

在一个标准的三层全连接神经网络(输入层、隐藏层、输出层节点数分别为n, h, m)中,如果使用均方误差作为损失函数,其反向传播过程中,计算输出层节点对输入层节点梯度时,需要使用的权重矩阵是输出层到隐藏层的权重矩阵的转置。

反向传播算法通过计算局部梯度并应用链式法则来求取全局梯度。

基本的RNN通过循环连接实现记忆,但其梯度计算容易受到梯度消失或梯度爆炸的影响。

在训练神经网络时,引入L2正则化的主要目的是降低模型的过拟合风险。

ROC曲线(接收者操作特征曲线)常用于评估二分类模型的性能,其横轴和纵轴分别代表真阳性率(TPR)假阳性率(FPR)

主观题

简述过拟合(Overfitting)现象在深度学习模型训练中可能出现的原因,并列举至少两种常用的应对过拟合的技术?

过拟合现象在深度学习模型训练中可能出现的原因如下:

模型复杂度高 :当模型的参数数量过多,或者模型结构过于复杂时,它有能力学习到训练数据中的噪声和异常值,而不仅仅是数据的一般模式。例如,在一个图像分类任务中,使用一个非常深的卷积神经网络,它可能会记住训练集中某些特定图像的细节,而不是学习到图像的通用特征。

训练数据量不足 :如果训练数据的数量有限,模型可能无法学习到数据的真实分布,从而过度依赖于训练数据中的局部特征。比如,在一个语音识别任务中,只有少量的语音样本用于训练,模型可能会对这些样本的发音特点过度拟合,而在面对新的语音数据时表现不佳。

训练数据质量差 :训练数据中存在噪声、错误标注或者数据分布不均匀等问题,会导致模型学习到错误的信息。例如,在一个文本分类任务中,训练数据中存在一些错误标注的文本,模型可能会将这些错误信息学习到,从而影响其泛化能力。

常用的应对过拟合的技术有:

正则化 :通过在损失函数中添加正则化项,限制模型参数的大小,从而减少模型的复杂度。常见的正则化方法有L1正则化和L2正则化。L1正则化会使部分参数变为零,起到特征选择的作用;L2正则化会使参数值变小,但不会变为零。

数据增强 :通过对训练数据进行各种变换,如旋转、翻转、缩放等,增加训练数据的多样性,从而提高模型的泛化能力。例如,在图像分类任务中,对训练图像进行随机旋转、翻转等操作,可以让模型学习到更多的图像特征。

Dropout :在训练过程中,随机地忽略一部分神经元,使得模型不能过度依赖于某些特定的神经元,从而提高模型的鲁棒性。例如,在一个全连接层中,每次训练时随机选择一部分神经元不参与计算,这样可以迫使模型学习到更具泛化性的特征。

早停法 :在训练过程中,监控模型在验证集上的性能,当验证集上的性能不再提升时,停止训练。这样可以避免模型在训练集上过度拟合。

简述什么是迁移学习(Transfer Learning)?在什么场景下我们倾向于冻结预训练模型的前几层参数,只训练最后几层?

迁移学习(Transfer Learning)是一种机器学习技术,它允许将在一个任务(源任务)上学习到的知识和经验,应用到另一个相关的任务(目标任务)中,以提高目标任务的学习效率和性能。

在以下场景下我们倾向于冻结预训练模型的前几层参数,只训练最后几层:

目标任务与源任务的输入数据分布相似,但任务目标不同。 例如,在图像分类任务中,预训练模型在大规模图像数据集上进行训练,学习到了通用的图像特征。当我们要将其应用到一个新的图像分类任务时,虽然图像的类别不同,但图像的基本特征(如边缘、纹理等)是相似的。此时,冻结前几层参数可以保留这些通用特征,只训练最后几层来适应新的分类任务。
目标任务的数据集较小。 当目标任务的数据集有限时,训练整个模型可能会导致过拟合。冻结预训练模型的前几层参数可以利用预训练模型已经学习到的知识,减少需要学习的参数数量,从而降低过拟合的风险。同时,只训练最后几层可以让模型在有限的数据上快速适应新的任务。
计算资源有限。 训练整个模型需要大量的计算资源和时间。冻结前几层参数可以减少计算量,加快训练速度,在计算资源有限的情况下也能进行有效的训练。

解释什么是梯度消失(Vanishing Gradient)问题?简述其在训练深层神经网络时可能带来的挑战。

梯度消失(Vanishing Gradient)是深层神经网络训练中因反向传播机制导致的核心问题 ------ 在通过损失函数计算各层权重的更新梯度时,梯度值会随着网络层数的加深呈指数级衰减,最终趋近于 0,使得深层网络的权重无法得到有效调整。其本质源于反向传播的 "链式法则":梯度计算需逐层传递并相乘,而早期神经网络常用的 sigmoid、tanh 等激活函数,其导数取值范围分别局限于 [0,0.25] 和 [-1,1],多层导数相乘后会快速趋近于 0(例如 10 层 sigmoid 网络的梯度乘积约为 0.25¹⁰≈9.5e-7),导致深层权重的更新信号几乎消失。

这一问题给深层神经网络训练带来多重关键挑战:首先,深层权重更新停滞,网络难以收敛 ------ 即便训练迭代多次,深层仍无法学习到数据的复杂特征,只能停留在浅层简单特征的拟合,最终导致模型欠拟合;其次,训练过程不稳定,出现 "前层更新、后层停滞" 的失衡状态,网络整体性能严重受限;此外,为缓解梯度消失而增大学习率时,又容易引发浅层梯度爆炸(与梯度消失同源的链式法则问题),陷入 "学习率调优两难";最后,即便模型勉强收敛,也可能因深层特征学习不足而泛化能力差,无法应对复杂任务(如图像识别、自然语言处理中的长序列建模)。

假设你需要使用深度学习方法对图像进行分类,图像属于三个类别:猫(cat)、狗(dog)、鸟(bird)。请简述你会选择哪种类型的深度学习模型(例如CNN),并概述构建该模型的主要步骤,包括数据准备、模型选择与设计、训练过程、模型评估以及可能的模型优化策略。

模型选择:CNN。

核心构建步骤:

  • 数据准备:获取均衡数据集(每类≥1000 张),按 7:1.5:1.5 划分训练 / 验证 / 测试集;统一图像尺寸(如 224×224),像素归一化([0,1] 或 [-1,1]),训练集做翻转 / 旋转 / 裁剪等增强,标签转为独热编码。
  • 模型设计:迁移学习方案 ------ 冻结预训练骨干网络 80% 参数,添加全局平均池化层 + 128 维全连接层(ReLU)+Dropout (0.5)+3 神经元输出层(Softmax);自定义 CNN 按 "Conv→ReLU→MaxPool" 堆叠,末端接池化 + 全连接 + Softmax。
  • 训练过程:用 CrossEntropyLoss(多分类损失)、Adam 优化器(学习率 1e-4),batch size=16/32,训练 30 个 Epoch;训练时启用 Dropout/BatchNorm,每 Epoch 用验证集评估,早停(5 个 Epoch 无提升)并保存最优模型。
  • 模型评估:加载最优模型,用测试集计算准确率、P/R/F1 分数、混淆矩阵;分析类别误分情况(如鸟类误分),定位性能短板。
  • 优化策略:过拟合→增强数据、增大 Dropout、加 L2 正则;欠拟合→加深模型、解冻更多预训练参数、补充样本;额外优化:学习率调度、类别权重平衡、梯度裁剪。
    在目标检测任务中,IoU(Intersection over Union)用于衡量预测框与真实框的重叠程度,其计算公式是两个框的交集面积 除以它们的并集面积

逻辑回归(Logistic Regression)可以看作是只有一层且激活函数为Sigmoid 的神经网络。

ReLU(Rectified Linear Unit,修正线性单元)是深度学习中最常用的激活函数之一,核心作用是为神经网络引入非线性,同时解决传统激活函数(如 sigmoid、tanh)的梯度消失问题,广泛应用于 CNN、DNN、Transformer 等模型的隐藏层。

对比传统激活函数:

请使用你熟悉的深度学习框架(TensorFlow或PyTorch),编写代码实现一个简单的全连接神经网络模型。该模型包含一个输入层(假设输入特征维度为4)、一个具有5个神经元的隐藏层(使用ReLU激活函数)、以及一个输出层(假设是一个二分类问题,输出层神经元数为1,使用Sigmoid激活函数)。要求: (1) 定义模型结构。 (2) 定义损失函数为二元交叉熵损失(Binary Cross-Entropy Loss)。 (3) 定义优化器为Adam,学习率为0.01。 (4) 解释为何选择二元交叉熵损失作为二分类问题的损失函数,并简要说明Adam优化器的特点。

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# ===================== 1. 定义全连接神经网络结构 =====================
class SimpleFCN(nn.Module):
    def __init__(self):
        super(SimpleFCN, self).__init__()
        # 输入层(4维) → 隐藏层(5个神经元),ReLU激活
        self.fc1 = nn.Linear(in_features=4, out_features=5)
        self.relu = nn.ReLU()
        # 隐藏层 → 输出层(1个神经元),Sigmoid激活(适配二分类)
        self.fc2 = nn.Linear(in_features=5, out_features=1)
        self.sigmoid = nn.Sigmoid()

    # 定义前向传播
    def forward(self, x):
        x = self.fc1(x)    # 线性变换:4维→5维
        x = self.relu(x)   # 非线性激活
        x = self.fc2(x)    # 线性变换:5维→1维
        x = self.sigmoid(x)# 输出概率(0~1)
        return x

# 实例化模型
model = SimpleFCN()

# ===================== 2. 定义二元交叉熵损失函数 =====================
# 注:PyTorch的BCELoss要求输入是sigmoid后的概率值,与标签(0/1)计算损失
criterion = nn.BCELoss()

# ===================== 3. 定义Adam优化器 =====================
optimizer = optim.Adam(model.parameters(), lr=0.01)

# 验证模型结构(可选)
print("模型结构:")
print(model)
# 测试前向传播(输入随机生成的1个样本,4维特征)
test_input = torch.randn(1, 4)  # shape: [batch_size=1, features=4]
test_output = model(test_input)
print("\n测试输入:", test_input)
print("测试输出(概率):", test_output)


解释欠拟合(Underfitting)现象及其常见原因,并列举两种改进欠拟合的方法。

欠拟合现象:模型无法捕捉数据规律,训练 / 验证 / 测试集性能均差("学不会")。

常见原因:模型结构过简、输入特征不足 / 质量差、训练不充分(迭代少 / 学习率不当)、正则化过强。

改进方法:① 提升模型复杂度(增隐藏层 / 神经元、换复杂架构);② 优化输入特征(补充关键特征、标准化 / 处理异常值)。

与过拟合区别:欠拟合是 "能力不够"(全数据集差),过拟合是 "能力过剩"(训练集好、测试集差)。

描述卷积神经网络(CNN)中一个典型的卷积层和池化层的作用。卷积操作主要解决了什么问题?池化操作带来了哪些好处?

一、典型卷积层与池化层的核心作用

  1. 卷积层(Conv Layer)
    核心作用:提取图像的局部特征,从低维基础特征(如边缘、纹理、颜色块)逐步抽象为高维语义特征(如物体部件、轮廓)。通过卷积核(滤波器)在输入特征图上滑动,计算局部区域的加权求和,将局部相关性强的信息整合为特征响应,实现特征的层级化提取。
  2. 池化层(Pooling Layer,常紧跟卷积层)
    核心作用:特征降维与信息浓缩,在保留关键特征的同时,减少特征图尺寸和模型参数。常见操作(如最大池化、平均池化)对局部特征区域取最大值或平均值,筛选出最具代表性的特征信息。

二、卷积操作解决的核心问题

传统全连接网络的参数爆炸问题:全连接层将图像展平为向量,参数数量随输入尺寸呈平方增长(如 32×32 图像展平后与 1000 神经元连接,需百万级参数);卷积层通过「权值共享」(同一卷积核在全图复用)和「局部感受野」(仅关注局部区域),大幅减少参数数量(如 5×5 卷积核仅需 25 个参数,与输入尺寸无关)。

丢失空间信息的问题:全连接层破坏图像的空间结构(如相邻像素的位置关系);卷积操作通过局部滑动计算,保留了像素间的空间相关性(如边缘的连续性、纹理的分布规律),确保特征提取依赖空间上下文。

三、池化操作带来的核心好处

降低计算复杂度:缩小特征图尺寸(如 2×2 最大池化使宽高减半),减少后续层的参数和计算量,提升训练效率。

增强模型鲁棒性:通过局部信息浓缩,使模型对输入图像的微小平移、缩放、形变不敏感(如物体轻微偏移后,池化仍能捕捉关键特征),即「平移 / 尺度不变性」。

抑制过拟合:减少特征维度和冗余信息,降低模型对局部噪声的依赖,提升泛化能力。

假设你受雇于一家电商公司,需要开发一个系统来自动分析用户对商品的评论是"正面"还是"负面"的(情感分析任务)。 (1) 数据预处理:你会对原始的文本评论数据做哪些预处理操作?(至少列举三点,如分词等) (2) 模型选择:你会选择什么样的深度学习模型架构?(例如RNN, LSTM, BERT等),并解释选择理由。 (3) 词向量表示:你会如何将文本转换为模型可以处理的向量形式?(例如One-hot, Word2Vec, Embedding层等) (4) 应对挑战:如果评论中包含大量的网络俚语或表情符号,你会如何处理?

一、数据预处理(针对电商评论文本)

需围绕 "降噪、标准化、适配模型输入" 展开,核心操作至少包含以下三类:

文本清洗(去噪声):剔除评论中的无关字符(如网址、商品链接、特殊符号★¥%、重复字符啊啊啊)、无意义占位符(如[图片])、广告话术(如 "关注店铺立减 5 元");统一处理中英文混排(如 "物流 yyds" 保留核心,剔除 "亲~" 等无情感冗余语气词)。

分词与停用词去除:

分词:中文用 Jieba/THULAC 分词(如 "物流超慢包装还破了"→[物流, 超慢, 包装, 还, 破了]),英文用 NLTK 分词;

去停用词:移除无情感意义的虚词(如 "的、了、还、在"),保留核心情感词(如 "慢、破、好用、满意"),可基于电商场景定制停用词表(如剔除 "商品、购买、下单" 等中性词)。

文本归一化:

形近字 / 错别字词统一(如 "炒鸡好用"→"超级好用"、"物流巨慢"→"物流极慢");

网络用语初步标准化(如 "yyds"→"非常好用"、"踩雷"→"不好用");

英文评论统一大小写(如 "Good"→"good"),数字归一化(如 "等了 5 天"→"等了多天",避免数字干扰情感判断)。

补充:长度规整:截断过长评论(如超过 50 字仅保留核心部分)、填充过短评论(如仅 "还行" 补充中性标记),保证输入长度统一,适配模型固定输入维度。

二、模型选择:优先选 BERT(或轻量版 RoBERTa-wwm)

选择理由:

适配电商评论的核心特点:电商评论多为短文本(10-50 字)、口语化强、情感依赖上下文(如 "虽然贵但质量绝了" 需结合上下文判断正面),而 BERT 的「双向上下文语义建模」能精准捕捉这种语境依赖,远优于传统 RNN/LSTM(单向建模,长程依赖捕捉差)、CNN(仅关注局部特征)。

开箱即用的领域适配性:可基于中文电商评论语料微调预训练 BERT(如 BERT-base-chinese + 电商评论语料二次预训练),无需从零训练,小数据集(如数万条评论)下也能达到高准确率。

对比其他模型的劣势:

RNN/LSTM:单向建模无法处理 "转折类" 评论(如 "便宜没好货"),且易出现梯度消失;

Word2Vec + 全连接:静态词向量无上下文,无法区分 "这个商品好" 和 "这个商品不好" 中 "好" 的语义差异;

轻量需求适配:若部署到低算力服务器,可选 DistilBERT(BERT 轻量化版本,参数减少 40%,精度仅降 2-3%)。

三、词向量表示:动态 Embedding(基于 BERT 的上下文词向量)

具体方案:

摒弃 One-hot:One-hot 仅编码词的唯一性,无语义信息(如 "好用" 和 "满意" 的 One-hot 向量无关联),且维度爆炸(电商评论词汇量约 1 万时,向量维度达 1 万),完全不适用于情感分析。

核心方案:BERT 内置的动态 Embedding 层:

无需提前训练词向量,模型在训练过程中自动学习「上下文相关的动态词向量」(如 "好" 在 "质量好" 和 "不好用" 中生成不同向量),精准匹配情感分析的语义需求;

输入层将分词后的文本转换为 BERT 的标准输入格式(Token ID + Segment ID + Attention Mask),Embedding 层输出维度统一(如 768 维),直接输入后续 Transformer 层。

备选方案(小数据集 / 低算力):

先用 Word2Vec(基于电商评论语料训练)生成静态词向量,再接入模型的微调 Embedding 层(训练中更新词向量),兼顾语义基础和上下文适配。

四、应对网络俚语 / 表情符号的解决方案

构建电商领域俚语 / 表情映射词典:

人工标注 + 爬虫收集:整理电商场景高频俚语(如 "yyds、踩雷、翻车、真香、绝绝子")和表情符号(如😘→满意、🤬→愤怒、🙄→不满、👍→推荐);

映射规则:将俚语 / 表情转换为标准化情感描述(如 "绝绝子"→"非常好"、"😡"→"生气 / 不满意"、"😭"→"失望 / 差评"),无明确情感的(如😜)标记为中性。

融入预训练过程:

将整理后的俚语 - 标准词对、表情 - 情感标签加入预训练语料,让 BERT 学习这类特殊表达的语义,避免模型将其视为 "未知词([UNK])"。

数据增强与标注优化:

对含俚语 / 表情的评论做同义替换增强(如 "yyds" 替换为 "超级好用",保留原情感),扩充训练样本;

标注时单独标记含俚语 / 表情的评论,训练后针对性分析这类样本的预测误差,迭代优化映射词典。

未知俚语处理:

对未收录的俚语,通过字符级 BERT(Char-BERT)建模,利用字形 / 字音特征推断语义,避免直接丢弃导致情感信息丢失。

当训练数据量较少时,为了提高模型性能,通常可以使用迁移学习技术 ,即利用在大规模数据集(如ImageNet)上预训练好的模型权重进行微调。

类似于L2正则化, L1正则化倾向于产生稀疏的权重矩阵(即许多参数变为0),因此常用于特征选择。

比较Sigmoid激活函数和ReLU激活函数的优缺点。为什么在深层网络中ReLU通常比Sigmoid更受欢迎?

深层网络中 ReLU 更受欢迎的核心原因

ReLU 成为深层网络(如 ResNet、VGG)主流激活函数,核心是解决了 Sigmoid 在深层场景下的致命问题,具体如下:

彻底缓解梯度消失问题(最核心原因):

Sigmoid 的导数最大值仅为 0.25,深层网络中梯度经多层传递后会指数级衰减(如 10 层 Sigmoid 网络,梯度可能衰减至几乎为 0),导致浅层参数无法更新;而 ReLU 在 x>0 时导数恒为 1,梯度可无衰减地传递到浅层,保证深层网络能有效训练。

计算效率适配深层规模:

深层网络参数数量级达百万 / 千万,Sigmoid 的指数运算会大幅增加计算耗时;ReLU 仅需简单的max(0,x)操作,计算成本仅为 Sigmoid 的 1/10,适配大规模深层模型的训练和推理。

收敛速度远快于 Sigmoid:

ReLU 的梯度稳定无饱和,训练时参数更新更高效,收敛速度通常是 Sigmoid 的 3~5 倍;而深层网络训练周期长,这一优势能显著降低时间成本。

稀疏激活降低过拟合风险:

深层网络易因参数过多过拟合,ReLU 的稀疏激活(部分神经元休眠)能减少特征冗余,提升模型泛化能力;而 Sigmoid 所有神经元均激活,易学习到训练数据的噪声。

请使用你熟悉的深度学习框架(TensorFlow或PyTorch),编写代码实现一个简单的卷积神经网络(CNN)用于处理图像分类任务(例如MNIST,输入为28x28的灰度图,10分类)。要求: (1) 定义模型类或结构:包含至少一个卷积层(Conv2d)、一个池化层(MaxPool2d)和一个全连接层(Linear/Dense)。 (2) 卷积层要求:卷积核大小3x3,使用ReLU激活函数。 (3) 定义损失函数为交叉熵损失(Cross Entropy Loss)。 (4) 定义优化器为SGD,学习率为0.01。

以下代码完整实现了要求的 CNN 模型,包含卷积层、池化层、全连接层,搭配交叉熵损失和 SGD 优化器,且适配 MNIST 数据集(28×28 灰度图、10 分类):

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
# 导入MNIST数据集和数据预处理工具
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# ===================== 1. 数据预处理(适配MNIST) =====================
# 定义数据变换:转为张量 + 归一化(MNIST像素值范围[0,255],归一化到[0,1])
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))  # MNIST官方推荐的均值/标准差
])

# 加载训练集和测试集
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)

# 数据加载器(批量处理数据)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

# ===================== 2. 定义CNN模型结构 =====================
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        # 卷积层:输入通道1(灰度图),输出通道16,卷积核3x3,步长1(默认)
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3)
        # ReLU激活函数(满足要求)
        self.relu = nn.ReLU()
        # 池化层:最大池化,核2x2,步长2
        self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)
        # 全连接层:需先计算卷积池化后的特征图尺寸,再映射到10分类
        # 特征图尺寸计算:28(输入) - 3(核大小) + 1 = 26 → 池化后26/2 = 13
        # 展平后维度:16(通道数) × 13(宽) × 13(高) = 2704
        self.fc1 = nn.Linear(in_features=16*13*13, out_features=10)

    # 前向传播
    def forward(self, x):
        # 卷积 → ReLU → 池化:shape变化 [batch,1,28,28] → [batch,16,26,26] → [batch,16,13,13]
        x = self.conv1(x)
        x = self.relu(x)
        x = self.maxpool(x)
        # 展平特征图:[batch,16,13,13] → [batch, 16*13*13=2704]
        x = x.view(x.size(0), -1)
        # 全连接层:[batch,2704] → [batch,10](10类概率得分)
        x = self.fc1(x)
        return x

# 实例化模型
model = SimpleCNN()
print("CNN模型结构:")
print(model)

# ===================== 3. 定义损失函数和优化器 =====================
# 交叉熵损失(适配多分类,PyTorch的CrossEntropyLoss已包含Softmax,模型最后无需加Softmax)
criterion = nn.CrossEntropyLoss()
# SGD优化器,学习率0.01(满足要求)
optimizer = optim.SGD(model.parameters(), lr=0.01)

# ===================== 4. 简单训练示例(可选,验证模型可运行) =====================
def train(model, loader, criterion, optimizer, epochs=1):
    model.train()  # 训练模式(启用BatchNorm/ Dropout等)
    for epoch in range(epochs):
        total_loss = 0.0
        for batch_idx, (data, target) in enumerate(loader):
            # 前向传播
            output = model(data)
            loss = criterion(output, target)
            # 反向传播 + 参数更新
            optimizer.zero_grad()  # 清空梯度
            loss.backward()        # 反向传播计算梯度
            optimizer.step()       # 更新参数
            # 打印训练进度
            total_loss += loss.item()
            if batch_idx % 100 == 99:
                print(f'Epoch {epoch+1}, Batch {batch_idx+1}, Loss: {total_loss/100:.4f}')
                total_loss = 0.0

# 运行1轮训练(仅验证模型可运行,实际需训练5-10轮)
train(model, train_loader, criterion, optimizer, epochs=1)

关键部分说明

模型结构符合要求:

卷积层:nn.Conv2d(1, 16, 3) 满足 "卷积核 3×3" 要求,搭配 ReLU 激活;

池化层:nn.MaxPool2d(2, 2) 为最大池化;

全连接层:nn.Linear(2704, 10) 映射到 10 分类,完成特征到类别得分的转换。

损失函数:nn.CrossEntropyLoss() 是多分类任务的标准损失,自动计算预测得分与真实标签的交叉熵,无需手动添加 Softmax(PyTorch 内置优化)。

优化器:optim.SGD(model.parameters(), lr=0.01) 严格遵循要求,学习率设为 0.01;若需提升收敛速度,可添加动量(如momentum=0.9),不影响核心要求。

运行说明:

运行代码会自动下载 MNIST 数据集(约 100MB);

训练 1 轮仅验证模型可运行,实际场景需训练 5-10 轮,测试集准确率可达 98% 以上;

模型前向传播输出为 10 维得分向量,取最大值索引即为预测类别(如索引 0 对应数字 0,索引 9 对应数字 9)。

应用题

假设有一个简单的线性回归模型 y = wx + b,其中 w 和 b 是模型参数。我们使用均方误差(MSE)作为损失函数 L = (y_pred - y_true)^2 / 2。给定一个数据点 (x=2, y_true=6),模型当前的参数为 w=1, b=1。 请计算: (1)该数据点的预测值 y_pred。 (2)该数据点的损失值 L。 (3)根据均方误差的梯度公式,计算损失函数关于参数 w 和 b 的梯度(即 dL/dw 和 dL/db)?

解答图片



在卷积神经网络中,假设输入图像大小为 32 X 32,使用 5 X 5的卷积核,步长()为1,无填充(Padding=0),则输出特征图的大小为?

假设我们有一个卷积层。输入特征图(Input Feature Map)的尺寸为 6 X 6(高 X 宽),通道数(Channels)为 1。卷积核(Kernel/Filter)的尺寸为 3 X 3,数量为 2 个。步长(Stride)为 1。填充(Padding)为 1(即在输入周围补一圈0)。请计算:(1)输出特征图的高和宽是多少?(请写出计算公式)(2)输出特征图的通道数是多少?(3) 该卷积层总共有多少个可学习的参数(权重 + 偏置,假设每个卷积核有一个偏置)?

相关推荐
upper20203 小时前
数据挖掘07
人工智能·数据挖掘
upper20203 小时前
数据挖掘06
人工智能·数据挖掘
码农小白猿3 小时前
农产品溯源新风潮:IACheck如何精准校验区块链记录与物流数据一致性
人工智能·ai·iacheck
爱笑的眼睛113 小时前
深入 Django 表单 API:从数据流到高级定制
java·人工智能·python·ai
搬砖的kk3 小时前
AMLA:以加代乘,解锁昇腾 MLA 算子高性能新范式
人工智能
upper20203 小时前
数据挖掘05
人工智能·数据挖掘
San30.3 小时前
从 0 到 1 打造 AI 冰球运动员:Coze 工作流与 Vue3 的深度实战
前端·vue.js·人工智能
爱好读书4 小时前
AI生成流程图
人工智能·流程图
一水鉴天4 小时前
整体设计 定稿 之 32 增强型领域六边形架构 设计(codebuddy)
开发语言·人工智能·架构