
一、卷积神经网络CNN1. 图像基础概念在正式聊CNN之前先来看一眼我们处理的对象——图像。图像是由密密麻麻的像素点组成的每个像素点的取值范围是[0, 255]。像素值越接近0颜色越暗接近黑色越接近255颜色越亮接近白色。在深度学习中大多数图像都是彩色图由RGB 三个通道组成分别是红Red、绿Green、蓝Blue。所以彩色图的形状通常是[H, W, C]即高度、宽度、通道数。简单理解RGB三原色可以混合出世界上任意颜色图像在计算机里就是三个通道的数值矩阵。importnumpyasnpimportmatplotlib.pyplotasplt# 全0数组 → 黑色图像img_blacknp.zeros([200,200,3])plt.imshow(img_black)plt.show()# 全255数组 → 白色图像img_whitenp.full([200,200,3],255)plt.imshow(img_white)plt.show()2. CNN概述卷积神经网络Convolutional Neural Network, CNN是含有卷积层的神经网络卷积层的作用是自动学习、提取图像的特征。CNN 网络主要由三部分构成层次作用卷积层CONV负责提取图像中的局部特征池化层POOL大幅降低参数量级降维全连接层FC输出CNN模型的预测结果CNN做的事情用一句话概括给定一张图片判断图片里是什么东西。最左边是数据输入层去均值、归一化等预处理中间经过卷积层激活层池化层的循环叠加最右边全连接层输出结果。3. 卷积层3.1 卷积计算过程卷积运算是 CNN 的核心本质上就是卷积核和输入数据的局部区域做点积线性乘积求和。input输入图像filter卷积核也叫滤波器、卷积矩阵output特征图feature map输入图像的局部区域 × 卷积核 → 特征图中的一个像素值滑动卷积核遍历整张图像就得到了完整的特征图。3.2 Padding填充如果不做任何处理每经过一次卷积特征图都会比原图小很多。Padding就是在原图周围添加一圈额外的像素通常是0使得卷积后图像大小保持不变。通俗理解卷积会让图像缩水padding就是在边缘垫一圈让图像不缩水。3.3 Stride步长Stride 指的是卷积核在图像上滑动时的步伐大小。步长为1表示每次移动1个像素步长为2表示每次跳过2个像素。步长越大特征图越小计算量也越小但可能丢失一些细节特征。3.4 多通道与多卷积核多通道卷积彩色图有RGB三个通道卷积时每个通道分别与对应的卷积核做点积再相加得到一个输出通道。多卷积核使用多个卷积核可以提取多种不同的特征每个卷积核产生一张特征图。3.5 特征图大小计算输入图像大小W×WW \times WW×W卷积核大小F×FF \times FF×F步长为SSS填充为PPP输出大小为N×NN \times NN×NNW−F2PS1N \frac{W - F 2P}{S} 1NSW−F2P1举例图像 5×5卷积核 3×3Stride1Padding1N5−32×1115N \frac{5 - 3 2 \times 1}{1} 1 5N15−32×115输出特征图仍为 5×5大小不变 ✅4. 池化层池化层Pooling位于卷积层之后通过下采样大幅降低数据维度从而减少计算量和内存消耗同时提高模型的鲁棒性。池化操作有两种主要类型类型计算方式特点最大池化MaxPool取区域最大值保留显著特征平均池化AvgPool取区域平均值保留背景信息简单理解最大池化就是选最厉害的平均池化就是取平均值。多通道池化池化层对每个输入通道分别独立池化输出通道数 输入通道数。importtorchimporttorch.nnasnn# 单通道池化inputstorch.tensor([[[0.,1.,2.],[3.,4.,5.],[6.,7.,8.]]])max_poolnn.MaxPool2d(kernel_size2,stride1,padding0)avg_poolnn.AvgPool2d(kernel_size2,stride1,padding0)print(最大池化\n,max_pool(inputs))print(平均池化\n,avg_pool(inputs))# 多通道池化inputs_multitorch.tensor([[[0.,1.,2.],[3.,4.,5.],[6.,7.,8.]],[[10.,20.,30.],[40.,50.,60.],[70.,80.,90.]],[[11.,22.,33.],[44.,55.,66.],[77.,88.,99.]]])print(多通道最大池化\n,max_pool(inputs_multi))二、循环神经网络RNN1. RNN概述与序列数据循环神经网络Recurrent Neural Network, RNN是专门处理序列数据的神经网络。与传统前馈神经网络不同RNN具有循环结构能够记住前面时间步的信息适用于时间序列或有时序依赖的数据。序列数据的核心特点后面的数据跟前面的数据有关系。举例来说我爱你这三个词的顺序不能颠倒——我在爱前面爱在你前面顺序一变意思就完全变了。RNN的典型应用场景应用领域具体任务自然语言处理NLP文本生成、机器翻译、情感分析时间序列预测股市预测、气象预测语音识别语音转文字音乐生成生成新乐曲RNN的内部结构分为三层词嵌入层 RNN层 全连接层。2. 词嵌入层2.1 什么是词嵌入自然语言是人类的语言无法直接被神经网络处理。词嵌入层的作用是把词token转换成向量即词向量这个过程叫做向量化。通俗比喻词嵌入就像给每个词发一张身份证每张身份证上写着一串数字这串数字代表了这个词的特征。词嵌入层在RNN中的作用输入表示将词转换为数值向量降低维度用低维向量表示高维稀疏信息语义表示相似词的词向量也相似词嵌入矩阵的形状为词表大小 × 词向量维度例如100个词、每个词用128维向量表示矩阵形状就是100×128。2.2 词嵌入的工作流程文本 → 分词 → token序列 → 索引序列 → Embedding查表 → 词向量序列 → 输入模型2.3 PyTorch词嵌入API在PyTorch中使用nn.Embedding实现词嵌入importtorchimporttorch.nnasnnimportjiebaif__name____main__:# 文本数据text北京冬奥的进度条已经过半不少外国运动员在完成自己的比赛后踏上归途。# 1. 文本分词wordsjieba.lcut(text)print(文本分词:,words)# 2. 分词去重获取词表unique_wordslist(set(words))print(去重后词的个数:,len(unique_words))# 3. 构建词嵌入层# num_embeddings: 词的总数量# embedding_dim: 词嵌入维度embednn.Embedding(num_embeddingslen(unique_words),embedding_dim4)# 4. 词的词向量表示fori,wordinenumerate(unique_words):word_vecembed(torch.tensor(i))print(f{word:3s}-{word_vec})3. RNN网络结构3.1 RNN的核心思想RNN的循环体现在每一时间步的输入不仅包含当前词的词向量还包含上一时间步的隐藏状态历史信息。输入当前时间步的输入值xtx_txt词向量 上一时间步的隐藏状态ht−1h_{t-1}ht−1输出当前时间步的隐藏状态hth_tht隐藏状态负责记忆序列数据中的历史信息并在不同时间步之间传递RNN的隐藏状态就像人的短期记忆它记录了到目前为止看到的所有词的信息。3.2 RNN的计算过程以用户意图识别任务为例输入句子 “What time is it?”将单词 “What” 输入RNN → 产生输出O1O_1O1隐层状态将单词 “time” 输入RNN → RNN不仅用time还结合上一步的隐层输出O1O_1O1→ 产生O2O_2O2重复上述步骤直到处理完所有单词最后用最终的隐层输出O5O_5O5来判断用户意图3.3 RNN的展开结构RNN按时间步展开后实际上是一系列权共享的神经网络每一列代表一个时间步的循环单元。权共享是RNN节省参数的关键——不管句子有多长用的是同一套权重。4. RNN的PyTorch APIimporttorchimporttorch.nnasnn# RNN基本用法示例rnnnn.RNN(input_size128,hidden_size256,num_layers2,batch_firstTrue)# 输入: (batch, seq_len, input_size)# 隐状态: (num_layers, batch, hidden_size)inputstorch.randn(32,50,128)# batch32, 句子长度50, 词向量维度128hiddentorch.zeros(2,32,256)output,hiddenrnn(inputs,hidden)print(输出形状:,output.shape)# (32, 50, 256)print(隐状态形状:,hidden.shape)# (2, 32, 256)三、实操案例CNN图像分类池化后的图片有点渗人就不在这展示了…frommatplotlibimportpyplotaspltimporttorch# 读取图像imgplt.imread(img.jpg)plt.imshow(img)plt.axis(off)plt.show()# 构建卷积层torch.manual_seed(0)convtorch.nn.Conv2d(in_channels3,out_channels3,kernel_size3,stride2,padding1)# 预处理转换类型并归一化img_tensortorch.tensor(img,dtypetorch.float32)/255.0print(f原始形状:{img_tensor.shape})# 调整维度(H, W, C) - (C, H, W)img_tensorimg_tensor.permute(2,0,1)print(f调整后形状:{img_tensor.shape})# 添加 Batch 维度img_tensorimg_tensor.unsqueeze(0)print(f升维后形状:{img_tensor.shape})# 通过卷积层feature_mapconv(img_tensor)print(f特征图形状:{feature_map.shape})# 最大池化max_pooltorch.nn.MaxPool2d(kernel_size2,stride2)pooledmax_pool(feature_map)print(f池化后形状:{pooled.shape})# 可视化特征图pooled_nppooled.detach().squeeze().permute(1,2,0).numpy()# 归一化到 [0, 1] 以便显示pooled_np(pooled_np-pooled_np.min())/(pooled_np.max()-pooled_np.min()1e-8)plt.imshow(pooled_np)plt.axis(off)plt.show()四、总结核心对比特性CNN卷积神经网络RNN循环神经网络处理对象图像空间数据序列数据时间/文本核心结构卷积层 池化层循环单元 隐藏状态权值共享卷积核在整个图像上共享权重在不同时间步共享记忆能力无时间维记忆有通过隐藏状态传递典型任务图像分类、目标检测NLP、时间序列预测改进版本ResNet、VGG、EfficientNetLSTM、GRU核心知识点回顾知识点一句话总结卷积运算卷积核与图像局部区域做点积提取特征Padding在图像边缘补0防止卷积后图像缩小Stride卷积核滑动步长影响特征图尺寸池化层下采样降维保留显著特征词嵌入将词转换为固定维度的数值向量RNN隐藏状态存储历史信息在时间步之间传递权值共享CNN和RNN都用同一套权重处理不同位置/时间步的数据大幅减少参数量CNN擅长处理空间信息RNN擅长处理时间/序列信息。两者是深度学习在计算机视觉和自然语言处理领域的基石后续的许多高级模型如Transformer都可以看作是它们的延伸和进化。