深度学习入门,从概念到实操一小时讲清楚!
文章目录
前言
一、深度学习和机器学习的区别?
二、深度学习常见的应用场景
三、深度学习代表算法——人工神经网络(ANN)
四、简单神经网络的搭建
五、强化神经网络的对的特征提取能力
总结
前言
深度学习作为人工智能领域的核心驱动力,正以前所未有的方式重塑着我们对世界的认知与交互。它通过构建多层次的神经网络模型,能够从海量数据中自动学习并提取复杂的特征与模式,在图像识别、自然语言处理、语音合成等众多领域取得了突破性进展。本文旨在系统性地介绍深度学习与神经网络的基础知识,从核心概念到实践搭建,帮助读者建立起对这一前沿技术的清晰理解。
提示:以下是本篇文章正文内容,下面案例可供参考
一、深度学习和机器学习的区别?
1、特征处理方面:
- 机器学习:人工处理设计特征
- 深度学习:不需要人工处理,只要经过网络输出即可(适用于图像、语音、自然语言处理)
二、深度学习常见的应用场景
图像识别、自然语言处理、语音技术以及机器学习效果不行的这些场景,特征需要复杂处理的地方。
三、深度学习代表算法——人工神经网络(ANN)
1、基本结构:包括输入层、隐层、输出层(全连接层)
2、特点:
- 每个连接都有权重,同一层神经元中没有连接
- 神经元中都会含有激活函数
- 最后一层是结构为全连接层的输出层
四、简单神经网络的搭建
如下所示,这里我们就简单定义了一个神经网络:其中Linear也就是我们的全连接层,其中:
fc1、fc2、fc3也就是我们的隐藏层,fc4为输出层;forward中就是我们要实现的神经网络模型,具体步骤如下:
- 首先将输入的图像(x)展平
- 依次通过不同的全连接层,并用relu进行非线性激活
- 最后将x送入到我们的输出层(不需要激活!!!),得到最后的结果进行返回
现在我的模型只用了全连接层哦 class QYNet(nn.Module): def __init__(self): super().__init__()#调用父类的初始化方法 #定义全连接层 self.fc1=nn.Linear(28*28,256) #输入28x28的图像,输出256个特征 self.fc2=nn.Linear(256,128) #输入256个特征,输出128个特征 self.fc3=nn.Linear(128,64) #输入128个特征,输出64个特征 self.fc4=nn.Linear(64,10) #输入64个特征,输出10个特征,对应10个类别 def forward(self,x): #展平数据,方便进行全连接 x=torch.flatten(x,1) #将输入x展平为一维,保留batch维度 x=F.relu(self.fc1(x)) #通过第一个全连接层,并使用ReLU激活函数 x=F.relu(self.fc2(x)) #通过第二个全连接层,并使用ReLU激活函数 x=F.relu(self.fc3(x)) #通过第三个全连接层,并使用ReLU激活函数 x=self.fc4(x) #通过第四个全连接层,输出最终的分类结果 return x #返回输出整个流程都非常的简单,然后我们只需要利用pytorch框架进行我们的模型训练即可。
五、强化神经网络的对的特征提取能力
上面我们讲了最基础的神经网络,下面我们可以使用卷积层、池化层等来增强我们的特征提取和计算速度,具体代码如下:
做了什么改进?
- 加入卷积层(Conv):卷积层其实就是利用一个小的卷积核(比如说3×3来对整张图像进行扫描)然后我们就会得到n(通道数=特征图数=卷积的个数)个特征图,这里我们使用不同的卷积核是因为每个卷积核关注的地方可能不一样,卷积核越多当然特征提取的也就越详细
- 加入池化层(pool):池化层其实也是利用一个窗口(比如2×2)对图像进行扫描,然后只取最大值(也就是这个窗口范围内信息量最大的点),这样能够加快我们的训练速度
- 加入批归一化(bn):也就是对每一层的输入进行标准化处理,保证训练的稳定性
神经网络的训练过程?
- 首先在第一个卷积层进行特征提取,然后对特征进行池化操作,归一化处理后用ReLu函数激活送入下一个卷积层
- 特征提取完后,同理也是送入到我们的隐藏层和输出层进行输出
#自定义一个基础的神经网络 class QYNet(nn.Module): def __init__(self): super().__init__()#调用父类的初始化方法 #1、定义卷积层,padding=1表示在输入的每一边补充1个像素的0,使得输出的尺寸不变,因为最边上的像素会有部分的卷积核无法覆盖到,所以需要补充0 self.conv1=nn.Conv2d(1,32,kernel_size=3,padding=1) #输入通道数为1,输出通道数为32,卷积核大小为3 #2、进行批归一化保证训练的稳定性 self.bn1=nn.BatchNorm2d(32) #对32个通道 self.conv2=nn.Conv2d(32,64,kernel_size=3,padding=1) self.bn2=nn.BatchNorm2d(64) #对64个通道 self.conv3=nn.Conv2d(64,128,kernel_size=3,padding=1) self.bn3=nn.BatchNorm2d(128) #对128个通道 #3、定义池化层——减少计算量保留最重要的特征,kernel_size=2表示池化窗口大小为2x2,stride=2表示步长为2 self.pool=nn.MaxPool2d(kernel_size=2,stride=2) #4、定义dropout层——防止过拟合,p=0.25表示有25%的概率将神经元置为0 self.dropout=nn.Dropout(p=0.25) #5、定义全连接层-计算展平之后的尺寸经过 3 次池化,28->14->7->3 self.fc1=nn.Linear(128*3*3,128) #输入28x28的图像,输出128个特征 self.fc2=nn.Linear(128,10) #输入128个特征,输出10个特征,对应10个类别 def forward(self,x): #展平数据,方便进行全连接 # 输入 x 形状: (batch, 1, 28, 28) x = self.pool(F.relu(self.bn1(self.conv1(x)))) # -> (batch, 32, 14, 14) x = self.pool(F.relu(self.bn2(self.conv2(x)))) # -> (batch, 64, 7, 7) x = self.pool(F.relu(self.bn3(self.conv3(x)))) # -> (batch, 128, 3, 3) x=torch.flatten(x,1) #将输入x展平为一维,保留batch维度 x=F.relu(self.fc1(x)) #通过第一个全连接层,并使用ReLU激活函数 x = self.dropout(x) # <--- 这里!在 fc1 和 fc2 之间插入 Dropout x=self.fc2(x) #通过最后一个全连接层,输出最终的分类结果 return x #返回输出总结
本文系统梳理了深度学习与神经网络的核心知识点:首先明确了深度学习与机器学习在特征处理上的根本区别;其次列举了深度学习在图像、语音、自然语言等复杂场景下的典型应用;接着深入剖析了人工神经网络(ANN)的基本结构与特点;然后通过PyTorch代码示例,演示了从简单全连接网络到集成卷积、池化、批归一化等模块的增强型网络的搭建过程。掌握这些基础是进一步探索更复杂模型(如CNN、RNN、Transformer)和应对实际AI挑战的关键第一步。
