引言为什么要学习 CNN 和 RNN在深度学习的世界里有两大神经网络架构堪称基石——卷积神经网络 (CNN)和循环神经网络 (RNN)。它们分别统治着计算机视觉和自然语言处理两大领域是每一位 AI 入门者必须掌握的核心技术。CNN让计算机看懂图像从手机的面部解锁到自动驾驶的目标检测再到医学影像的智能诊断RNN让计算机理解语言从 ChatGPT 的对话生成到机器翻译再到语音识别本文将用通俗易懂的方式配合精心绘制的示意图带你从零开始掌握这两大神经网络的核心原理。第一部分卷积神经网络 (CNN)1.1 图像基础计算机如何看图片在深入 CNN 之前我们首先要理解计算机眼中的图片是什么样子的三个基本概念高、宽、通道每张图片都可以用三个维度来描述Height (高)图片的垂直像素数单位是像素Width (宽)图片的水平像素数单位是像素Channel (通道)颜色信息的维度关于颜色的小知识0 代表黑色255 代表白色RGB 图像有 3 个通道红 (Red)、绿 (Green)、蓝 (Blue)每个通道的取值范围都是 0-255numpy vs PyTorch数据格式的差异这是新手最容易踩坑的地方不同框架存储图片的顺序不一样numpy 格式(H, W, C)- 通道在最后一维例如一张 224×224 的 RGB 图片 →(224, 224, 3)PyTorch 格式(C, H, W)- 通道在第一维例如一张 224×224 的 RGB 图片 →(3, 224, 224)记住这个区别在 PyTorch 中做图像处理时一定要记得把 numpy 的 (H,W,C) 转成 (C,H,W)图像的四种类型图像类型通道数取值范围说明二值图像10/1只有黑白两种颜色灰度图像10-255从黑到白的 256 级灰度索引图像1索引值存储索引通过颜色表查找 RGBRGB 图像30-255真彩色图像红 绿 蓝三通道图像处理三大 API# 读取图片将图片文件转为像素矩阵imagecv2.imread(cat.jpg)# 返回numpy数组 (H, W, C)# 显示图片根据像素矩阵绘制图像cv2.imshow(image,image)# 保存图片将像素矩阵保存为文件cv2.imwrite(output.jpg,image)1.2 CNN 是什么卷积神经网络 (Convolutional Neural Network, CNN)是一种专门用于处理网格结构数据如图像的神经网络。CNN 的四大组成部分输入层接收图像、视频、音频频谱图等数据卷积层提取图像特征图核心池化层降低特征图维度减少计算量输出层输出最终预测结果分类、检测等CNN 的典型应用场景✅ 图像分类识别猫 / 狗 / 汽车✅ 目标检测在图中框出人和物体✅ 面部解锁手机人脸识别✅ 自动驾驶道路和交通标志识别✅ 医学影像CT/MRI 病灶检测1.3 卷积层特征提取的核心卷积层是 CNN 的灵魂它的作用是自动提取图像的特征。什么是卷积核 / 滤波器卷积核也叫滤波器可以理解为带有共享参数的神经元。一个 3×3 的卷积核就是 9 个可学习的参数。有多少个卷积核就相当于有多少个神经元每个神经元负责提取一种特征。卷积计算过程单通道卷积计算步骤将卷积核与特征图对应位置的数值相乘将所有乘积相加得到一个输出值滑动窗口重复上述过程多通道卷积计算步骤每个通道分别与对应卷积核做卷积计算将所有通道的计算结果相加最终得到一个二维特征图关键点输入有多少个通道卷积核就必须有多少个通道Padding保护边缘信息Padding 就是在特征图周围补 0它有两个重要作用防止边缘信息丢失如果不补 0边缘像素只被计算一次中间像素被计算多次保持特征图形状一致让输入和输出的尺寸相同Stride控制降维速度Stride 是卷积核每次移动的步长stride1每次移动 1 个像素输出尺寸接近输入stride2每次移动 2 个像素输出尺寸减半Stride 的作用✅ 降维减少特征图大小✅ 扩大感受野让每个输出看到更大的输入区域特征图大小计算公式N floor((W - F 2P) / S 1) 其中 W 原特征图大小 F 卷积核大小 (Filter size) P padding填充圈数 S stride步长 floor() 向下取整举例输入 5×5卷积核 3×3padding1stride1N (5 - 3 2×1)/1 1 5 输出5×5 ✓ 尺寸不变Conv2d API 详解importtorch.nnasnn# 创建卷积层convnn.Conv2d(in_channels3,# 输入通道数RGB是3out_channels64,# 输出通道数 卷积核个数kernel_size3,# 卷积核大小 3×3stride1,# 步长默认1padding1# 填充默认0)参数说明in_channels输入图像的通道数RGB3灰度 1out_channels卷积核的数量决定输出通道数kernel_size卷积核的尺寸3 最常用stride滑动步长padding周围补 0 的圈数1.4 池化层高效降维池化层的作用是在不改变通道数的前提下降低特征图的高和宽。⚠️与卷积层的核心区别池化层没有可学习的参数没有神经元只有池化窗口两种池化方式1. 最大池化 (Max Pooling)提取窗口内的最大值作用保留最显著的特征最常用2. 平均池化 (Average Pooling)提取窗口内的平均值作用平滑特征减少噪声池化的特点✅ 只在 H 和 W 维度降维通道数保持不变✅ 没有参数需要学习✅ 计算简单速度快Pooling API 详解# 最大池化max_poolnn.MaxPool2d(kernel_size2,# 池化窗口大小stride2,# 步长默认等于kernel_sizepadding0# 填充默认0)# 平均池化avg_poolnn.AvgPool2d(kernel_size2,stride2)常用技巧kernel_size2, stride2 可以将特征图尺寸正好减半第二部分循环神经网络 (RNN)2.1 RNN 是什么循环神经网络 (Recurrent Neural Network, RNN)是专门处理序列数据的神经网络。什么是序列数据序列数据有两个特点时间步生成数据是按顺序一个一个产生的前后关联当前数据和前面的数据有关系例如文本我 爱 深度 学习→ 每个词依赖前面的语境语音按时间顺序的音频波形股票按时间顺序的价格数据RNN 的典型应用场景✅ 生成式 AI 大模型GPT、LLaMA 等✅ 机器翻译中→英✅ 语音识别语音→文字✅ 自然语言处理 NLP✅ 时间序列预测2.2 词嵌入层让计算机理解词语计算机不认识猫、狗这样的文字我们需要把词转换成向量。词嵌入的作用词嵌入 (Embedding)将离散的词语转换为低维稠密向量我 → [0.12, 0.34, 0.56, ...]爱 → [0.23, 0.45, 0.67, ...]为什么要这么做神经网络只能处理数值相似的词在向量空间中距离更近语义保持降低维度避免维度灾难词嵌入的完整流程文本句子 → 分词 → 词语 → 下标 → 词向量 举例 我爱自然语言处理 → 分词[我, 爱, 自然语言, 处理] → 下标[0, 1, 2, 3] → 向量[[0.1,...], [0.2,...], [0.3,...], [0.4,...]]Embedding API 详解# 创建词嵌入层embeddingnn.Embedding(num_embeddings10000,# 词汇表大小总词数embedding_dim128# 每个词向量的维度)# 使用输入下标输出向量word_indicestorch.tensor([0,1,2,3])# 词语的下标word_vectorsembedding(word_indices)# 输出(4, 128)参数说明num\_embeddings词汇表中总共有多少个不同的词embedding\_dim每个词转换成多少维的向量2.3 RNN 循环层具有记忆的网络RNN 最神奇的地方就是具有记忆功能—— 它能记住之前看到的信息RNN 的计算原理RNN 的核心公式当前隐藏状态 ht 当前输入xt 上一步记忆ht-1详细计算过程接收当前输入x_t词向量接收上一步的记忆h_{t-1}隐藏状态计算得到当前记忆h_t基于 h_t 输出预测结果y_t形象理解h 就像 RNN 的大脑每一步都会更新记忆然后基于记忆做出预测。RNN API 详解# 创建RNN层rnnnn.RNN(input_size128,# 输入特征维度词向量维度hidden_size256,# 隐藏层维度记忆的大小num_layers1# RNN的层数默认1层)# 使用RNN# x: (序列长度, batch大小, 词向量维度)# h0: (层数, batch大小, 隐藏层维度)output,hnrnn(x,h0)参数说明input_size输入数据的特征维度通常等于词向量维度hidden_size隐藏状态的维度决定 #34;记忆容量#34;num_layers堆叠多少层 RNN层数越多能力越强但越难训练输入输出形状输入 x(seq_len, batch_size, input_size)输入 h0(num_layers, batch_size, hidden_size)输出 output(seq_len, batch_size, hidden_size)输出 hn(num_layers, batch_size, hidden_size)总结与对比CNN vs RNN 核心对比维度CNNRNN处理数据空间数据图像序列数据文本 / 语音核心思想局部感受野 参数共享循环连接 状态传递记忆能力无每次独立处理有记住历史信息擅长领域计算机视觉自然语言处理输出长度固定可变可生成任意长度学习路线建议先学 CNN概念更直观可视化效果好容易建立信心再学 RNN理解记忆和序列的概念为学习 Transformer 打基础进阶学习LSTM/GRU解决 RNN 梯度消失→ Transformer注意力机制代码示例汇总完整的 CNN 示例图像分类importtorchimporttorch.nnasnnclassSimpleCNN(nn.Module):def__init__(self):super().__init__()# 输入: (3, 32, 32)self.conv1nn.Conv2d(3,16,kernel_size3,padding1)# (16, 32, 32)self.poolnn.MaxPool2d(2,2)# (16, 16, 16)self.conv2nn.Conv2d(16,32,kernel_size3,padding1)# (32, 16, 16)# pool后: (32, 8, 8)self.fcnn.Linear(32*8*8,10)# 10分类defforward(self,x):xself.pool(torch.relu(self.conv1(x)))xself.pool(torch.relu(self.conv2(x)))xx.flatten(1)xself.fc(x)returnx完整的 RNN 示例文本分类classSimpleRNN(nn.Module):def__init__(self,vocab_size10000,embed_dim128,hidden_size256):super().__init__()self.embeddingnn.Embedding(vocab_size,embed_dim)self.rnnnn.RNN(embed_dim,hidden_size,num_layers1)self.fcnn.Linear(hidden_size,2)# 二分类defforward(self,x):# x: (序列长度, batch_size)xself.embedding(x)# (seq_len, batch, embed_dim)output,hnself.rnn(x)# 取最后一个时间步的输出做分类last_outputoutput[-1]# (batch, hidden_size)returnself.fc(last_output)写在最后恭喜你现在你已经掌握了 CNN 和 RNN 的核心概念CNN通过卷积核提取空间特征是计算机视觉的基石RNN通过循环状态传递记忆是序列处理的基础这两个网络虽然结构不同但都体现了深度学习的核心思想 ——让神经网络自动学习特征而不是人工设计。掌握了这些你就可以向更高级的模型进发了CNN 方向ResNet、YOLO、ViTRNN 方向LSTM、GRU、Transformer、GPT深度学习的世界很精彩继续加油
CNN与RNN入门技术博客
发布时间:2026/5/19 13:26:07
引言为什么要学习 CNN 和 RNN在深度学习的世界里有两大神经网络架构堪称基石——卷积神经网络 (CNN)和循环神经网络 (RNN)。它们分别统治着计算机视觉和自然语言处理两大领域是每一位 AI 入门者必须掌握的核心技术。CNN让计算机看懂图像从手机的面部解锁到自动驾驶的目标检测再到医学影像的智能诊断RNN让计算机理解语言从 ChatGPT 的对话生成到机器翻译再到语音识别本文将用通俗易懂的方式配合精心绘制的示意图带你从零开始掌握这两大神经网络的核心原理。第一部分卷积神经网络 (CNN)1.1 图像基础计算机如何看图片在深入 CNN 之前我们首先要理解计算机眼中的图片是什么样子的三个基本概念高、宽、通道每张图片都可以用三个维度来描述Height (高)图片的垂直像素数单位是像素Width (宽)图片的水平像素数单位是像素Channel (通道)颜色信息的维度关于颜色的小知识0 代表黑色255 代表白色RGB 图像有 3 个通道红 (Red)、绿 (Green)、蓝 (Blue)每个通道的取值范围都是 0-255numpy vs PyTorch数据格式的差异这是新手最容易踩坑的地方不同框架存储图片的顺序不一样numpy 格式(H, W, C)- 通道在最后一维例如一张 224×224 的 RGB 图片 →(224, 224, 3)PyTorch 格式(C, H, W)- 通道在第一维例如一张 224×224 的 RGB 图片 →(3, 224, 224)记住这个区别在 PyTorch 中做图像处理时一定要记得把 numpy 的 (H,W,C) 转成 (C,H,W)图像的四种类型图像类型通道数取值范围说明二值图像10/1只有黑白两种颜色灰度图像10-255从黑到白的 256 级灰度索引图像1索引值存储索引通过颜色表查找 RGBRGB 图像30-255真彩色图像红 绿 蓝三通道图像处理三大 API# 读取图片将图片文件转为像素矩阵imagecv2.imread(cat.jpg)# 返回numpy数组 (H, W, C)# 显示图片根据像素矩阵绘制图像cv2.imshow(image,image)# 保存图片将像素矩阵保存为文件cv2.imwrite(output.jpg,image)1.2 CNN 是什么卷积神经网络 (Convolutional Neural Network, CNN)是一种专门用于处理网格结构数据如图像的神经网络。CNN 的四大组成部分输入层接收图像、视频、音频频谱图等数据卷积层提取图像特征图核心池化层降低特征图维度减少计算量输出层输出最终预测结果分类、检测等CNN 的典型应用场景✅ 图像分类识别猫 / 狗 / 汽车✅ 目标检测在图中框出人和物体✅ 面部解锁手机人脸识别✅ 自动驾驶道路和交通标志识别✅ 医学影像CT/MRI 病灶检测1.3 卷积层特征提取的核心卷积层是 CNN 的灵魂它的作用是自动提取图像的特征。什么是卷积核 / 滤波器卷积核也叫滤波器可以理解为带有共享参数的神经元。一个 3×3 的卷积核就是 9 个可学习的参数。有多少个卷积核就相当于有多少个神经元每个神经元负责提取一种特征。卷积计算过程单通道卷积计算步骤将卷积核与特征图对应位置的数值相乘将所有乘积相加得到一个输出值滑动窗口重复上述过程多通道卷积计算步骤每个通道分别与对应卷积核做卷积计算将所有通道的计算结果相加最终得到一个二维特征图关键点输入有多少个通道卷积核就必须有多少个通道Padding保护边缘信息Padding 就是在特征图周围补 0它有两个重要作用防止边缘信息丢失如果不补 0边缘像素只被计算一次中间像素被计算多次保持特征图形状一致让输入和输出的尺寸相同Stride控制降维速度Stride 是卷积核每次移动的步长stride1每次移动 1 个像素输出尺寸接近输入stride2每次移动 2 个像素输出尺寸减半Stride 的作用✅ 降维减少特征图大小✅ 扩大感受野让每个输出看到更大的输入区域特征图大小计算公式N floor((W - F 2P) / S 1) 其中 W 原特征图大小 F 卷积核大小 (Filter size) P padding填充圈数 S stride步长 floor() 向下取整举例输入 5×5卷积核 3×3padding1stride1N (5 - 3 2×1)/1 1 5 输出5×5 ✓ 尺寸不变Conv2d API 详解importtorch.nnasnn# 创建卷积层convnn.Conv2d(in_channels3,# 输入通道数RGB是3out_channels64,# 输出通道数 卷积核个数kernel_size3,# 卷积核大小 3×3stride1,# 步长默认1padding1# 填充默认0)参数说明in_channels输入图像的通道数RGB3灰度 1out_channels卷积核的数量决定输出通道数kernel_size卷积核的尺寸3 最常用stride滑动步长padding周围补 0 的圈数1.4 池化层高效降维池化层的作用是在不改变通道数的前提下降低特征图的高和宽。⚠️与卷积层的核心区别池化层没有可学习的参数没有神经元只有池化窗口两种池化方式1. 最大池化 (Max Pooling)提取窗口内的最大值作用保留最显著的特征最常用2. 平均池化 (Average Pooling)提取窗口内的平均值作用平滑特征减少噪声池化的特点✅ 只在 H 和 W 维度降维通道数保持不变✅ 没有参数需要学习✅ 计算简单速度快Pooling API 详解# 最大池化max_poolnn.MaxPool2d(kernel_size2,# 池化窗口大小stride2,# 步长默认等于kernel_sizepadding0# 填充默认0)# 平均池化avg_poolnn.AvgPool2d(kernel_size2,stride2)常用技巧kernel_size2, stride2 可以将特征图尺寸正好减半第二部分循环神经网络 (RNN)2.1 RNN 是什么循环神经网络 (Recurrent Neural Network, RNN)是专门处理序列数据的神经网络。什么是序列数据序列数据有两个特点时间步生成数据是按顺序一个一个产生的前后关联当前数据和前面的数据有关系例如文本我 爱 深度 学习→ 每个词依赖前面的语境语音按时间顺序的音频波形股票按时间顺序的价格数据RNN 的典型应用场景✅ 生成式 AI 大模型GPT、LLaMA 等✅ 机器翻译中→英✅ 语音识别语音→文字✅ 自然语言处理 NLP✅ 时间序列预测2.2 词嵌入层让计算机理解词语计算机不认识猫、狗这样的文字我们需要把词转换成向量。词嵌入的作用词嵌入 (Embedding)将离散的词语转换为低维稠密向量我 → [0.12, 0.34, 0.56, ...]爱 → [0.23, 0.45, 0.67, ...]为什么要这么做神经网络只能处理数值相似的词在向量空间中距离更近语义保持降低维度避免维度灾难词嵌入的完整流程文本句子 → 分词 → 词语 → 下标 → 词向量 举例 我爱自然语言处理 → 分词[我, 爱, 自然语言, 处理] → 下标[0, 1, 2, 3] → 向量[[0.1,...], [0.2,...], [0.3,...], [0.4,...]]Embedding API 详解# 创建词嵌入层embeddingnn.Embedding(num_embeddings10000,# 词汇表大小总词数embedding_dim128# 每个词向量的维度)# 使用输入下标输出向量word_indicestorch.tensor([0,1,2,3])# 词语的下标word_vectorsembedding(word_indices)# 输出(4, 128)参数说明num\_embeddings词汇表中总共有多少个不同的词embedding\_dim每个词转换成多少维的向量2.3 RNN 循环层具有记忆的网络RNN 最神奇的地方就是具有记忆功能—— 它能记住之前看到的信息RNN 的计算原理RNN 的核心公式当前隐藏状态 ht 当前输入xt 上一步记忆ht-1详细计算过程接收当前输入x_t词向量接收上一步的记忆h_{t-1}隐藏状态计算得到当前记忆h_t基于 h_t 输出预测结果y_t形象理解h 就像 RNN 的大脑每一步都会更新记忆然后基于记忆做出预测。RNN API 详解# 创建RNN层rnnnn.RNN(input_size128,# 输入特征维度词向量维度hidden_size256,# 隐藏层维度记忆的大小num_layers1# RNN的层数默认1层)# 使用RNN# x: (序列长度, batch大小, 词向量维度)# h0: (层数, batch大小, 隐藏层维度)output,hnrnn(x,h0)参数说明input_size输入数据的特征维度通常等于词向量维度hidden_size隐藏状态的维度决定 #34;记忆容量#34;num_layers堆叠多少层 RNN层数越多能力越强但越难训练输入输出形状输入 x(seq_len, batch_size, input_size)输入 h0(num_layers, batch_size, hidden_size)输出 output(seq_len, batch_size, hidden_size)输出 hn(num_layers, batch_size, hidden_size)总结与对比CNN vs RNN 核心对比维度CNNRNN处理数据空间数据图像序列数据文本 / 语音核心思想局部感受野 参数共享循环连接 状态传递记忆能力无每次独立处理有记住历史信息擅长领域计算机视觉自然语言处理输出长度固定可变可生成任意长度学习路线建议先学 CNN概念更直观可视化效果好容易建立信心再学 RNN理解记忆和序列的概念为学习 Transformer 打基础进阶学习LSTM/GRU解决 RNN 梯度消失→ Transformer注意力机制代码示例汇总完整的 CNN 示例图像分类importtorchimporttorch.nnasnnclassSimpleCNN(nn.Module):def__init__(self):super().__init__()# 输入: (3, 32, 32)self.conv1nn.Conv2d(3,16,kernel_size3,padding1)# (16, 32, 32)self.poolnn.MaxPool2d(2,2)# (16, 16, 16)self.conv2nn.Conv2d(16,32,kernel_size3,padding1)# (32, 16, 16)# pool后: (32, 8, 8)self.fcnn.Linear(32*8*8,10)# 10分类defforward(self,x):xself.pool(torch.relu(self.conv1(x)))xself.pool(torch.relu(self.conv2(x)))xx.flatten(1)xself.fc(x)returnx完整的 RNN 示例文本分类classSimpleRNN(nn.Module):def__init__(self,vocab_size10000,embed_dim128,hidden_size256):super().__init__()self.embeddingnn.Embedding(vocab_size,embed_dim)self.rnnnn.RNN(embed_dim,hidden_size,num_layers1)self.fcnn.Linear(hidden_size,2)# 二分类defforward(self,x):# x: (序列长度, batch_size)xself.embedding(x)# (seq_len, batch, embed_dim)output,hnself.rnn(x)# 取最后一个时间步的输出做分类last_outputoutput[-1]# (batch, hidden_size)returnself.fc(last_output)写在最后恭喜你现在你已经掌握了 CNN 和 RNN 的核心概念CNN通过卷积核提取空间特征是计算机视觉的基石RNN通过循环状态传递记忆是序列处理的基础这两个网络虽然结构不同但都体现了深度学习的核心思想 ——让神经网络自动学习特征而不是人工设计。掌握了这些你就可以向更高级的模型进发了CNN 方向ResNet、YOLO、ViTRNN 方向LSTM、GRU、Transformer、GPT深度学习的世界很精彩继续加油