静态中英文网站怎么做,长沙中小企业有哪些公司,做网站素材在哪里找,wordpress需要调用缩略图#x1f497;#x1f497;#x1f497;欢迎来到我的博客#xff0c;你将找到有关如何使用技术解决问题的文章#xff0c;也会找到某个技术的学习路线。无论你是何种职业#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章#xff0c;也欢… 欢迎来到我的博客你将找到有关如何使用技术解决问题的文章也会找到某个技术的学习路线。无论你是何种职业我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临让我们一起踏上这个知识之旅 文章目录 引言卷积神经网络的基本原理全连接网络 VS 卷积神经网络卷积神经网络卷积层paddingstride 池化层 完整代码卷积神经网络的应用领域总结 引言 当谈到深度学习和计算机视觉时卷积神经网络Convolutional Neural NetworksCNNs一直是热门话题。CNNs是一类专门设计用于处理图像数据的深度学习神经网络已经在许多领域取得了重大成功如图像分类、目标检测、人脸识别和自动驾驶。本文将探讨卷积神经网络的基本原理、应用领域以及一些最新趋势。 卷积神经网络的基本原理 卷积层Convolutional Layer卷积层是CNN的核心组件用于提取图像的特征。它通过在输入图像上滑动卷积核对每个位置进行卷积运算从而生成特征图。这些特征图捕获了不同位置的局部特征。 池化层Pooling Layer池化层用于减小特征图的尺寸减少计算负担同时保留最重要的信息。常见的池化操作包括最大池化和平均池化。 全连接层Fully Connected Layer全连接层将卷积层和池化层的输出连接在一起用于执行最终的分类或回归任务。这一层通常包括多个神经元每个神经元对应一个类别或回归目标。 激活函数Activation Function在卷积层和全连接层之间通常会应用非线性激活函数如ReLURectified Linear Unit以引入非线性特性增强网络的表达能力。
全连接网络 VS 卷积神经网络
在开始学习卷积神经网络前我们先来回顾一下全连接网络正如名字全连接代表了每一层的属于都对后面的输出有影响当然它们之间是相互影响关联的下图可以看出后面会展示卷积神经网络可以拿来对比一下。 它们之间的差异主要体现在结构性的差异上
全连接网络在全连接网络中每个神经元与前一层中的每个神经元相连接。这意味着每个神经元都受到前一层中所有神经元的影响导致参数数量迅速增加。卷积神经网络CNNCNN使用卷积层其中神经元仅与输入数据的局部区域相连接而不是与整个输入相连接。这减少了参数数量使CNN在处理图像等大型数据时更加高效。
卷积神经网络
下图清楚的展示了一个卷积网络大概的流程是
input的1×28×28经过卷积层5×5的卷积变为4×24×24的Features maps再经过2×2的池化层变为4×12×12的Features maps再经过5×5的卷积层变为8×8×8的Features maps最后经过2×2的池化层变为8×4×4的Features maps这个部分是特征提取。经过特征提取后进行分类器部分这里主要是通过全连接将其转化为一维向量最后再变为十维的输出 这里再进行一些必要的说明全连接会导致原有的空间结构丧失卷积神经网络可以保留原有的空间结构 池化的目的是减小尺寸减低计算复杂度降低过拟合的风险保留关键信息常用的Maxpooling就是取局部最大 convolutionsubsamplingFeature Extraction 这里我们进行一下简单的扩展栅格图像和矢量图像
栅格图像是以像素为基础的适用于复杂的图像和照片但受限于分辨率和放大时的失真。矢量图像是基于数学形状的适用于图标、标志和需要无损缩放和编辑的应用。 我们使用卷积神经网络处理的图像通常情况是栅格图像 这些栅格图像由像素组成每个像素都有自己的颜色信息通常表示为红、绿、蓝RGB或灰度值。CNN的卷积层通过在图像上滑动卷积核来识别特征这些卷积核与图像的局部区域相连接从而有效地捕获图像中的各种特征如边缘、纹理和形状。
卷积层
下图展示了卷积层的基本元素由input Channel、width、height、output Channel组成这里取其中的一个Patch然后将其在进行上下左右的平移。 或许大家对上图不是很清楚那么我们来看看下图或许可以更直观的理解卷积运算 这里是input 是1×5×5经过1×3×3的卷积核运算变为1×3×3的output
注意这里input的Channel与卷积核的Channel的一致的最终就会得到如下的output 那么如果是Channel3呢会有什么变化卷积核与output会产生什么变化下图清楚的展示流程 如果堆叠起来那会变为下图所示
那么我们再扩展一下如果有n个Input Channel、m个Output Channel 注意这里input Channel的值与卷积核的Channel相同Output Channel与卷积核的数量相同 使用Pytorch进行演示的话
import torch
in_channels, out_channels 5, 10
width, height 100, 100
kernel_size 3
batch_size 1
input torch.randn(batch_size,in_channels,width,height)
conv_layer torch.nn.Conv2d(in_channels,out_channels,kernel_sizekernel_size)
output conv_layer(input)
print(input.shape)
print(output.shape)
print(conv_layer.weight.shape)运行代码如下
接下来再简单介绍一下两个Conv2d的两个可选参数
padding
当padding1代表为input做一层0填充这样的Output就会和input拥有相同的尺寸了
import torch
input [3,4,6,5,7,2,4,6,8,2,1,6,7,8,4,9,7,4,6,2,3,7,5,4,1]
input torch.Tensor(input).view(1, 1, 5, 5)
conv_layer torch.nn.Conv2d(1, 1, kernel_size3, padding1, biasFalse)
kernel torch.Tensor([1,2,3,4,5,6,7,8,9]).view(1, 1, 3, 3)
conv_layer.weight.data kernel.data
output conv_layer(input)
print(output)运行结果如下
stride
这个参数是步长的意思可以减少特征图的尺寸
import torch
input [3,4,6,5,7,2,4,6,8,2,1,6,7,8,4,9,7,4,6,2,3,7,5,4,1]
input torch.Tensor(input).view(1, 1, 5, 5)
conv_layer torch.nn.Conv2d(1, 1, kernel_size3, stride2, biasFalse)
kernel torch.Tensor([1,2,3,4,5,6,7,8,9]).view(1, 1, 3, 3)
conv_layer.weight.data kernel.data
output conv_layer(input)
print(output)运行结果如下
池化层
池化层上面已经简单介绍了这不就不一一赘述
import torch
input [3,4,6,5,2,4,6,8,1,6,7,8,9,7,4,6,
]
input torch.Tensor(input).view(1, 1, 4, 4)
maxpooling_layer torch.nn.MaxPool2d(kernel_size2)
output maxpooling_layer(input)
print(output)运行结果如下
完整代码
下图可以清楚的展示了一整个卷积流程 具体代码如下
import torch
import torch.nn.functional as F
class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 torch.nn.Conv2d(1, 10, kernel_size5)self.conv2 torch.nn.Conv2d(10, 20, kernel_size5)self.pooling torch.nn.MaxPool2d(2)self.fc torch.nn.Linear(320, 10)def forward(self, x):batch_size x.size(0)x self.pooling(F.relu(self.conv1(x)))x self.pooling(F.relu(self.conv2(x)))x x.view(batch_size, -1) # flattenx self.fc(x)return x
model Net()如果有GPU的话我们可以使用GPU计算
device torch.device(cuda:0 if torch.cuda.is_available() else cpu)
model.to(device)训练和测试代码如下
def train(epoch):running_loss 0.0for batch_idx, data in enumerate(train_loader, 0):inputs, target dataoptimizer.zero_grad()# forward backward updateoutputs model(inputs)loss criterion(outputs, target)loss.backward()optimizer.step()running_loss loss.item()if batch_idx % 300 299:print([%d, %5d] loss: %.3f % (epoch 1, batch_idx 1, running_loss / 2000))running_loss 0.0def test():correct 0total 0with torch.no_grad():for data in test_loader:inputs, target datainputs, target inputs.to(device), target.to(device)outputs model(inputs)_, predicted torch.max(outputs.data, dim1)total target.size(0)correct (predicted target).sum().item()print(Accuracy on test set: %d %% [%d/%d] % (100 * correct / total, correct, total))卷积神经网络的应用领域 图像分类CNNs可以识别图像中的对象、动物、人物等因此被广泛用于图像分类任务。有名的例子包括ImageNet图像分类竞赛中的深度卷积网络。 目标检测CNNs可以帮助检测图像中的物体并确定它们的位置。这在自动驾驶、视频监控和医学图像分析中都有重要应用。 人脸识别CNNs可以识别和验证人脸这在手机解锁、社交媒体标签和安全监控中都有广泛应用。 自然语言处理CNNs不仅仅用于图像处理还可以用于文本分类和自然语言处理任务如情感分析和垃圾邮件检测。 医学图像分析CNNs有助于分析医学影像如X光片、MRI扫描和CT扫描用于诊断和疾病检测。
总结 卷积神经网络是深度学习的关键技术之一它在图像处理和其他领域中取得了巨大的成功。随着技术的不断发展我们可以期待看到更多令人兴奋的进展和应用。如果你对这个领域感兴趣可以看看刘二大人讲的 本文根据b站刘二大人《PyTorch深度学习实践》完结合集学习后加以整理文中图文均不属于个人。 挑战与创造都是很痛苦的但是很充实。