当前位置: 首页 > news >正文

自建网站套现ppt网站建设答案

自建网站套现,ppt网站建设答案,ftp服务器租用,百度搜索页面卷积神经网络是人脸识别、自动驾驶汽车等大多数计算机视觉应用的支柱。可以认为是一种特殊的神经网络架构#xff0c;其中基本的矩阵乘法运算被卷积运算取代#xff0c;专门处理具有网格状拓扑结构的数据。 1、全连接层的问题 1.1、全连接层的问题 “全连接层”的特点是每个… 卷积神经网络是人脸识别、自动驾驶汽车等大多数计算机视觉应用的支柱。可以认为是一种特殊的神经网络架构其中基本的矩阵乘法运算被卷积运算取代专门处理具有网格状拓扑结构的数据。 1、全连接层的问题 1.1、全连接层的问题 “全连接层”的特点是每个单元之间连接所有的前一层单元。这种连接方式使得全连接层能够学习到输入数据之间的非线性关系并能够在神经网络中扮演重要的角色。 但是全连接层也存在一些主要问题这些问题主要表现在以下几个方面 1、参数数量巨大全连接层中的参数数量随着输入和输出单元数量的增加而急剧增加。这会导致训练时间增加并且很容易导致过拟合。 举个例子假设我们有一个全连接层该层具有 1000 个输入单元和 100 个输出单元 意味着该层中有  1000x100 100000 个权重参数和 100 个偏置参数。这对于较小的神经网络来说可能不是问题但是对于规模较大的神经网络来说参数数量的增加可能会导致训练时间增加并且很容易导致过拟合。 例如如果我们在该层之后再添加一个具有 100 个输入单元和 10 个输出单元的全连接层则该层中将有 100*101000 个权重参数和 10 个偏置参数。这样我们的神经网络中就有 101000 个参数。如果我们再添加几层全连接层参数数量将会进一步增加。 可以看出当神经网络中包含许多全连接层时参数数量可能会变得非常庞大这对于训练和推理来说都是挑战。 2、对空间不友好全连接层对输入数据的空间属性没有任何假设这意味着它不能很好地处理空间相关的数据。例如图像数据中的像素是有空间位置关系的而全连接层无法很好地利用这种关系。 3、对小型数据集不友好由于全连接层中的参数数量非常庞大因此在训练数据较少的情况下很容易导致过拟合。 4、对计算资源不友好全连接层中的大量参数意味着它需要大量的计算资源进行训练和推理。这对于计算资源有限的系统来说是一个挑战尤其是在模型规模较大的情况下。 5、对于序列数据不友好全连接层无法很好地处理序列数据因为它无法保留序列中各个元素之间的顺序信息。例如在处理文本数据时单词的顺序是非常重要的但全连接层无法保留这种顺序信息。 1.2、多层感知机的局限 前面学习的多层感知机也就是仅仅使用全连接层的深度神经网络除了上述问题外在处理实际应用的时候还有很多局限。例如人工智能试图解决的一大类问题都涉及到图像处理。而多层感知机在这方面遇到了两个显著的困难平移不变性和局部性问题。 1. 平移不变性 Translation Invariance 它指的是模型对输入数据的平移不敏感。 例如考虑一张 n 维的输入数据和一个平移矩阵 T 其中 T 是一个 nxn 的矩阵。 对于一个平移不变的模型 对于任意的 x 和 T 都有 f(x) f(Tx)。 这意味着如果我们将输入数据 x 平移一小段距离则模型应该能够正确地识别输入中的对象。 举个例子来说在图像分类任务中如果我们将一张图像平移一小段距离则模型应该能够正确地识别图像中的对象。 但是多层感知机很难学习到这种平移不变性因为它们是由许多全连接层组成的其中每层的权重参数都是固定的。因此多层感知机很难对输入数据的平移进行建模。 2. 局部性 局部性是指模型对输入数据的局部信息敏感。 这是神经网络中非常好的一个特性因为在许多应用中输入数据通常包含大量局部信息而这些局部信息往往可以帮助我们识别数据中的模式。 比如图像分类任务中可以借助图像局部信息识别对象。 然而遗憾的是多层感知机很难学习到这种局部性。为什么呢 因为它们是由许多全连接层组成的其中每层的权重参数都是固定的。这意味着多层感知机无法从输入数据的局部信息中学习到有用的特征。 还是以图像分类任务来说假设我们有一张图像其中包含一个狗的头部这是想要识别的目标对象。如果我们使用的是多层感知机来进行图像分类那么需要将整张图像输入到模型中并期望模型能够从图像的整体信息中识别出狗的头部。然而由于多层感知机没有学习到局部性的能力因此很难做到这一点。 正是上述问题促使科学家们思考如何改进多层感知机这样都是全连接层的网络。由此发展出来了卷积神经网络等一系列更加强大的高级模型。想要学好卷积神经网络先要从什么是卷积开始。 2、图像卷积 2.1、卷积 卷积其实是一种数学运算常用于信号处理和图像处理领域。 它的基本思想是将一个函数与另一个函数进行点积并通过滑动窗口的方式计算整个输入数据的值。一维卷积的数学表示如下 其中 f 和 g 分别表示输入函数和卷积核函数*  表示卷积运算符t 表示时间τ 表示滑动窗口的位置。 二维卷积的数学公式类似如下所示 其中 f 和 g 分别表示输入函数和卷积核函数*  表示卷积运算符x 和 y 表示二维平面上的位置x 和 y 表示滑动窗口的位置。 卷积值通常称为特征映射。 2.2、图像卷积 在图像处理中卷积通常用于图像卷积和图像滤波。 图像卷积是指将图像与卷积核进行卷积运算从而得到新的图像。 2.3、互相关运算和卷积运算 *** 存疑 在图像卷积中这两个数学概念经常容易混淆。互相关运算cross-correlation的数学定义如下 其中I 是输入图像K 是卷积核* 是互相关运算的符号 (xy)是输出图像中的像素坐标。 真正的卷积运算convolution数学公式 二者是不是长的很像只差了一个正负号卷积和互相关相比加号变成了减号。 严格说在数学上它们是不同的运算但是在图像处理领域两者差别就没那么明显了或者说反而产生了混用现象。 我们用一个例子来加以说明。 先看互相关运算下图左边为原始图像它和一个卷积核做互相关运算后得到右边的输出图像。 卷积核在左边图像上滑动同时做互相关运算也就是对应元素相乘在相加。由于原图像多数元素都为0只在输入图像中心为1因此最后输出了右边图像。结果显示相当于把卷积核进行了180度翻转。 再来看卷积运算公式中它和互相关相比改变了符号体现在图像上就是先把卷积核进行了180度翻转或者说就是先左右翻转然后上下翻转然后再进行互相关运算。如下图所示 由于卷积运算相当于翻转了两次因此最后输出图像中还是123456789这样的顺序而互相关运算只翻转了一次最终结果变成了987654321这样的形式。 虽然两种运算看似不同但由于卷积核是自己定的本身没有顺序上的限制所以完全可以用翻转过的卷积核这样以来二者就没啥区别了。也正是因为这个原因大部分深度学习框架在代码实现的时候偷了懒干脆用了互相关运算替代了卷积。因此严格意义上说卷积层用的是互相关运算但依然被叫成了卷积。 2.4、图像卷积的作用 3、卷积层 应用了图像卷积操作的神经网络隐藏层。 卷积层的主要作用是提取输入数据的局部特征并将这些局部特征抽象为更高级的特征。 Filter 滤波器也就是核函数。 对比经典的神经元模型 3.1、图像内核的效果 Image Kernels explained visually 3.2、感受野Receptive Field 感受野就是 对外界输入信息有相应的区域是指输入张量中卷积层特征映射中的每个元素所能“感受”到的区域。 例如假设输入张量的大小为 H x W 内核大小为 k x k那么卷积层的感受野大小就为 k x k。 举个例子假设输入张量是一张 5x5 的图像卷积层使用 3x3 的内核stride 1 为 padding 为 0 那么卷积层的输出张量大小为 3x3 感受野大小为 3x3 。 在计算机视觉当中就是卷积核的大小 在生物学中就是神经元的刺激反应范围。 3.3、卷积层和全连接层区别 卷积核大小限制放松了卷积核可滑动 ~ 卷积层的输入是一个多维数组而全连接层的输入是一个向量。 3.4、卷积层的性质 1、稀疏交互 ***  存疑 Sparse Interaction核的大小远远小于输入的大小连接变少交互更加稀疏。 从而可以通过只有几十个或上百个像素点的图像内核图像内核本身可以变得很小来检测很小但是更加有意义的图像特征就像拿着放大镜去看。 输入图像可能是非常大的因此他就减少了对模型参数的存储大大提高了统计的效率。 2、参数共享 Parameter Sharing: 空间不同位置共享同样的参数内核小窗口滑动。 共享权值的方式意味着同一个卷积层内的所有节点都使用相同的权值。这与全连接层不同全连接层中的每个节点都有一个独立的权值。因此卷积层的参数数量要比全连接层少得多。 显著降低模型参数存储需求提高统计效率。 3、平移相等性平移等变 Translation Equivariance 输入变化输出跟着相同变化。 假定 f 是特征g 是变换用公式表示 即先提取特征再进行变换和 先进行变换在提取特征 没什么区别。 3.5、卷积层常见操作 3.5.1、Padding 填充 如果卷积核和输入图像尺寸不同输出图像的大小就不能与输入图像保持一致了。为了解决这个问题人们想出了很简单但是实用的办法就是填充padding操作。 卷积内核越界时采用填充。 padding (卷积核大小 - 1) / 2 使用填充时的注意事项 在使用 padding 时你需要确定 padding 的大小。一般来说padding 的大小应该是卷积核的大小的一半。例如如果卷积核的大小是 3x3则 padding 的大小应该是 1。这样卷积核就可以对输入图像的所有像素进行卷积运算而不会忽略边缘像素。 在使用 padding 时输入图像的大小会变大。这可能会导致模型的计算量增加并可能需要更多的存储空间。因此你需要考虑是否真的需要使用 padding或者是否可以使用更小的 padding 大小。 在使用 padding 时输出图像的大小也会变大。这可能会导致模型的计算量增加并可能需要更多的存储空间。因此你需要考虑是否真的需要使用 padding或者是否可以使用更小的 padding 大小。 在使用 padding 时你可能需要使用更多的卷积层来捕捉更多的特征。因为使用 padding 后输入图像的大小会变大所以你可能需要使用更多的卷积层来提取图像的特征。 3.5.2、Stride 步长 调整步长可以改变卷积核在输入图像上滑动的距离 导致卷积核对输入图像进行卷积运算的次数减少输出图像大小成倍减小但是可能导致信息丢失。 此外步长还可以用于控制卷积核的步长在输入图像的哪一维方向滑动。 例如假设我们有一个 4x4 的输入图像和一个 3x3 的卷积核。如果我们设置步长为 (1, 2)则卷积核会在输入图像的行方向滑动 1 个像素在列方向滑动 2 个像素。这样卷积核会对输入图像进行 4 次卷积运算并产生一个 2x2 的输出图像。 代码实现 import torch# 创建输入图像 input_image  torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])# 创建卷积核 kernel  torch.tensor([[0, 1, 0],[1, 1, 1],[0, 1, 0]])# 使用步长为 1 进行卷积运算 output_image  torch.conv2d(input_image.unsqueeze(0).unsqueeze(0), kernel.unsqueeze(0).unsqueeze(0), stride1, padding1) print(Output image with stride1:) print(output_image) # 使用步长为 2 进行卷积运算 output_image_strided  torch.conv2d(input_image.unsqueeze(0).unsqueeze(0), kernel.unsqueeze(0).unsqueeze(0), stride2,padding1) print(Output image with stride2:) print(output_image_strided)  # 使用步长为 3 进行卷积运算 output_image_strided  torch.conv2d(input_image.unsqueeze(0).unsqueeze(0), kernel.unsqueeze(0).unsqueeze(0), stride3) print(Output image with stride3:) print(output_image_strided)  Output image with stride1: tensor([[[[ 8, 12, 16, 15],[21, 30, 35, 31],[37, 50, 55, 47],[36, 52, 56, 43]]]]) Output image with stride2: tensor([[[[ 8, 16],[37, 55]]]]) Output image with stride3: tensor([[[[30]]]]) 3.6、卷积常见参数关系         卷积层的特征映射feature map是指卷积层对输入数据进行卷积后得到的输出张量。                 特征映射中的每个元素都是输入张量中相应区域的卷积和其中区域的大小和形状由卷积层的内核大小决定。                   为什么不用 奇数 x 偶数偶数 x 偶数 的卷积核呢         这是由于 奇数 x 奇数 的卷积核 更容易进行padding而且更容易找到卷积的锚点。 3.7、多通道卷积 每个滤波器 Filter 都是卷积核的一个集合。 输入通道数 卷积核通道个数 滤波器个数 输出通道数 最后输出 feature map。 3.8、分组卷积 从上图可以看出一般的卷积会对输入数据的整体一起做卷积操作 即输入数据H1×W1×C1 而卷积核大小为h1×w1一共有C2个即共有C2个h×w×c1的滤波器 然后卷积得到的输出数据就是H2×W2×C2。 这里我们假设输出和输出的分辨率是不变的。主要看这个过程是一气呵成的这对于存储器的容量提出了更高的要求。  如果将输入 feature map 按通道分为 g 组则每组特征图的尺寸为 每组对应的滤波器卷积核的 尺寸 为  每组的滤波器数量为  个滤波器总数依然为 C2 个。 每组的滤波器只与其同组的输入 map 进行卷积每组输出特征图尺寸为 将 g 组卷积后的结果进行拼接 (concatenate) 得到最终的得到最终尺寸为  的输出特征图。 4、池化层 Pooling 本质就是采样用来压缩信息。 将输入的特征映射到更小的特征空间中从而使网络结构变得更加紧凑。 如果没有池化层网络的参数数量就会变得非常大这会导致训练时间变长并且容易出现过拟合现象。 池化层通过下采样的方式实现了信息的压缩减少了网络的参数数量这有助于缩短训练时间并且可以防止过拟合。 这里下采样是指将输入的特征缩小为原来的一部分。此外池化层还可以帮助网络学习更加抽象的特征从而提升分类的准确率。 总体而言池化层在卷积神经网络中起到了信息压缩的作用减少了参数的数量防止过拟合并且可以帮助网络学习更加抽象的特征。 4.1、卷积网络典型结构 分类问题会加上一层 softmax。 4.2、最大池化 Max Pooling 使用邻域内最大值来代替网络在该位置的输出 4.3、平均池化 Average Pooling 求区域滤波器 / 窗口的平均值。 最大池化层可以帮助网络学习更强的特征而平均池化层可以帮助网络学习更平滑的特征。二者都可以帮助网络学习更强的特征同时还可以防止过拟合。当然池化层可能会丢失某些有用的信息并且对噪声敏感。 4.4、填充、步长和多通道问题 Padding与卷积层类似用于控制输出大小。例如在池化层后使用全连接层时可以使用填充来确保输入和输出大小相同。 Stride池化运算期间每次滑动的窗口的距离。步长越大窗口在输入图像上的滑动距离就越大这意味着输出的特征图就越小。步长越小窗口在输入上的滑动距离就越小这意味着输出的特征图就越大。 多通道 每个通道上单独池化再拼接混合池化全局池化等 4.5、池化层的特点 不变性(invariance) 含平移旋转和缩放池化主要指平移不变。 如果输出是给出图中猫的位置不管输入怎么移动、缩放输出相应的改变这就是等变性。 如果只是输出是否有猫无论猫怎么移动输出都保持有猫的判断就是不变性。 不变性(invariance)池化层主要是平移不变性。 保留主要特征的同时减少参数和计算量防止过拟合。 可以帮助网络学习更加抽象的特征。 池化层没有参数。 4.6、先验视角看卷积和池化 卷积隐藏神经元权重必须与其邻居权重相同。 池化神经元具有少量平移、旋转、缩放的不变性。 卷积和池化可以看成是模型引人了很强的先验概率分布。 5、LeNet 模型 最经典的深度卷积神经网络由Yann LeCun在1998年提出的LeNet。它是为了解决手写数字识别问题而设计的并且在当时取得了很好的成功。 LeNet结构 输入层LeNet的输入层接受28x28像素的灰度图像。 卷积层1这一层包含6个卷积核每个卷积核的大小为5x5卷积步长为1。该层使用Sigmoid激活函数。 池化层1这一层使用2x2的最大池化窗口步长为2。这一层的作用是降低图像尺寸并保留最重要的特征。 卷积层2这一层包含16个卷积核每个卷积核的大小为5x5卷积步长为1。该层使用Sigmoid激活函数。 池化层2这一层使用2x2的最大池化窗口步长为2。这一层的作用与池化层1相同。 全连接层这一层包含120个节点使用Sigmoid激活函数。 全连接层这一层包含84个节点使用Sigmoid激活函数。 输出层这一层包含10个节点对应0~9的十个数字。 代码实现 # 导入必要的库torchinfo用于查看模型结构 import torch import torch.nn as nn from torchinfo import summary 模型定义 # 定义LeNet的网络结构 class LeNet(nn.Module):def __init__(self, num_classes10):super(LeNet, self).__init__()# 卷积层1输入1个通道输出6个通道卷积核大小为5x5self.conv1 nn.Conv2d(in_channels1, out_channels6, kernel_size5)# 卷积层2输入6个通道输出16个通道卷积核大小为5x5self.conv2 nn.Conv2d(in_channels6, out_channels16, kernel_size5)# 全连接层1输入16x4x4256个节点输出120个节点由于输入数据略有差异修改为16x4x4self.fc1 nn.Linear(in_features16 * 4 * 4, out_features120)# 全连接层2输入120个节点输出84个节点self.fc2 nn.Linear(in_features120, out_features84)# 输出层输入84个节点输出10个节点self.fc3 nn.Linear(in_features84, out_featuresnum_classes)def forward(self, x):# 使用ReLU激活函数并进行最大池化x torch.relu(self.conv1(x))x nn.functional.max_pool2d(x, kernel_size2)# 使用ReLU激活函数并进行最大池化x torch.relu(self.conv2(x))x nn.functional.max_pool2d(x, kernel_size2)# 将多维张量展平为一维张量x x.view(-1, 16 * 4 * 4)# 全连接层x torch.relu(self.fc1(x))# 全连接层x torch.relu(self.fc2(x))# 全连接层x self.fc3(x)return x 网络结构 # 查看模型结构及参数量input_size表示示例输入数据的维度信息 summary(LeNet(), input_size(1, 1, 28, 28)) Layer (type:depth-idx) Output Shape Param #LeNet [1, 10] -- ├─Conv2d: 1-1 [1, 6, 24, 24] 156 ├─Conv2d: 1-2 [1, 16, 8, 8] 2,416 ├─Linear: 1-3 [1, 120] 30,840 ├─Linear: 1-4 [1, 84] 10,164 ├─Linear: 1-5 [1, 10] 850Total params: 44,426 Trainable params: 44,426 Non-trainable params: 0 Total mult-adds (M): 0.29Input size (MB): 0.00 Forward/backward pass size (MB): 0.04 Params size (MB): 0.18 Estimated Total Size (MB): 0.22模型训练 # 导入必要的库 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms from tqdm import * # tqdm用于显示进度条并评估任务时间开销 import numpy as np import sys# 设置随机种子 torch.manual_seed(0)# 定义模型、优化器、损失函数 model LeNet() optimizer optim.SGD(model.parameters(), lr0.02) criterion nn.CrossEntropyLoss()# 设置数据变换和数据加载器 transform transforms.Compose([transforms.ToTensor(), # 将数据转换为张量 ])# 加载训练数据 train_dataset datasets.MNIST(root../data/mnist/, trainTrue, downloadTrue, transformtransform) # 实例化训练数据加载器 train_loader DataLoader(train_dataset, batch_size256, shuffleTrue) # 加载测试数据 test_dataset datasets.MNIST(root../data/mnist/, trainFalse, downloadTrue, transformtransform) # 实例化测试数据加载器 test_loader DataLoader(test_dataset, batch_size256, shuffleFalse)# 设置epoch数并开始训练 num_epochs 10 # 设置epoch数 loss_history [] # 创建损失历史记录列表 acc_history [] # 创建准确率历史记录列表# tqdm用于显示进度条并评估任务时间开销 for epoch in tqdm(range(num_epochs), filesys.stdout):# 记录损失和预测正确数total_loss 0total_correct 0# 批量训练model.train()for inputs, labels in train_loader:# 预测、损失函数、反向传播optimizer.zero_grad()outputs model(inputs)loss criterion(outputs, labels)loss.backward()optimizer.step()# 记录训练集losstotal_loss loss.item()# 测试模型不计算梯度model.eval()with torch.no_grad():for inputs, labels in test_loader:# 预测outputs model(inputs)# 记录测试集预测正确数total_correct (outputs.argmax(1) labels).sum().item()# 记录训练集损失和测试集准确率loss_history.append(np.log10(total_loss)) # 将损失加入损失历史记录列表由于数值有时较大这里取对数acc_history.append(total_correct / len(test_dataset))# 将准确率加入准确率历史记录列表# 打印中间值if epoch % 2 0:tqdm.write(Epoch: {0} Loss: {1} Acc: {2}.format(epoch, loss_history[-1], acc_history[-1]))# 使用Matplotlib绘制损失和准确率的曲线图 import matplotlib.pyplot as plt plt.plot(loss_history, labelloss) plt.plot(acc_history, labelaccuracy) plt.legend() plt.show()# 输出准确率 print(Accuracy:, acc_history[-1]) Epoch: 0 Loss: 2.7325645021239664 Acc: 0.2633 Epoch: 2 Loss: 2.630008887238046 Acc: 0.6901 Epoch: 4 Loss: 1.9096679044736495 Acc: 0.9047 Epoch: 6 Loss: 1.7179356540642037 Acc: 0.9424 Epoch: 8 Loss: 1.5851480201856594 Acc: 0.9413 100%|██████████| 10/10 [01:4600:00, 10.65s/it]Accuracy: 0.9628参考 7-5 卷积神经网络 Chapter-07/7.6 卷积神经网络代码实现.ipynb · 梗直哥/Deep-Learning-Code - Gitee.com 分组卷积Grouped convolution-CSDN博客 轻量级网络论文-MobileNetv1 详解 - 知乎
http://www.zqtcl.cn/news/283079/

相关文章:

  • 如何免费申请网站外贸工艺品网站建设
  • 有名的wordpress网站网站开发企业培训
  • 中国建设银行绑定网站南宁seo如何做
  • 饮食类网站律师资格证报考条件
  • 昆明网站建设推广房源管理免费系统
  • jsp网站开发书籍环保网站 怎么做
  • 深圳营销型网站建设公司搜狗短网址生成
  • 如何优化购物网站建设广州seo公司排行
  • iis5.1 新建网站舆情系统的作用
  • 北京国互网网站建设公司东莞寮步搬家公司
  • 学校门户网站是什么意思做网站的意义大不大
  • 做网站卖酒网站内容建设的布局和结构
  • 效果图在哪个网站可以找比较好wordpress网站背景设置
  • 专业整站优化韩国设计公司网站
  • 网站建设与规划学的心得体会WordPress主题启用出现错误
  • 网站建设 资讯宁波东方论坛首页
  • 东莞网站制作有名 乐云践新郑州官方网
  • 网站开发经理具备什么知识调查问卷网站建设
  • 做购买网站企业宣传片制作拍摄
  • logo艺术字转换器徐州seo企业
  • 禹城网站建设公司湖州城市投资建设集团网站
  • 上海城乡住房建设厅网站asp网站怎么做301定向
  • 惠州免费网站建设上海家装10强名单
  • 新手学习做网站电子商务网站建设与维护实验报告
  • 网站建设制作设计推广上海职业技能培训机构
  • 网站不同颜色网站无障碍的建设方面空缺
  • 手机网站织梦模板it初学者做网站
  • asp做的网站怎么发布企业黄页网站源码
  • 在云服务器上搭建网站云端视差wordpress企业主题破解版
  • 英德市住房城乡建设网站图片设计公司