📅  最后修改于: 2020-12-10 05:23:34             🧑  作者: Mango
深度学习是机器学习的一部分,被认为是近几十年来研究人员迈出的关键一步。深度学习实现的示例包括图像识别和语音识别等应用。
下面给出了深度神经网络的两种重要类型-
在本章中,我们将重点介绍第一种类型,即卷积神经网络(CNN)。
卷积神经网络旨在通过多层阵列处理数据。这种类型的神经网络用于诸如图像识别或面部识别之类的应用中。
CNN与任何其他普通神经网络之间的主要区别在于,CNN将输入作为二维数组,直接在图像上进行操作,而不是关注其他神经网络所关注的特征提取。
CNN的主要方法包括解决识别问题的方法。像Google和Facebook这样的顶级公司已经投资了识别项目的研发项目,以更快地完成活动。
每个卷积神经网络都包含三个基本概念-
让我们详细了解这些术语。
CNN利用输入数据内存在的空间相关性。神经网络的并发层中的每个层都连接一些输入神经元。该特定区域称为本地感受野。它仅关注隐藏的神经元。隐藏的神经元将处理上述字段内的输入数据,而不会实现特定边界之外的更改。
下面提到生成本地各个字段的图形表示-
在上图中,我们观察到每个连接都学习隐藏神经元的权重,并具有从一层到另一层的运动的关联连接。在此,单个神经元会不时执行转换。这个过程称为“卷积”。
从输入层到隐藏特征图的连接映射定义为“共享权重”,所包含的偏差称为“共享偏差”。
卷积神经网络使用在CNN声明后立即定位的池化层。它将来自用户的输入作为特征图,该特征图来自卷积网络并准备压缩的特征图。池化层有助于创建具有先前层神经元的层。
以下步骤用于使用PyTorch创建卷积神经网络。
导入必要的软件包以创建简单的神经网络。
from torch.autograd import Variable
import torch.nn.functional as F
创建具有卷积神经网络批处理表示形式的类。输入x的批处理形状的尺寸为(3,32,32)。
class SimpleCNN(torch.nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
#Input channels = 3, output channels = 18
self.conv1 = torch.nn.Conv2d(3, 18, kernel_size = 3, stride = 1, padding = 1)
self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2, padding = 0)
#4608 input features, 64 output features (see sizing flow below)
self.fc1 = torch.nn.Linear(18 * 16 * 16, 64)
#64 input features, 10 output features for our 10 defined classes
self.fc2 = torch.nn.Linear(64, 10)
计算第一卷积大小的激活从(3,32,32)更改为(18,32,32)。
尺寸的大小从(18、32、32)变为(18、16、16)。由于其大小从(18,16,16)变为(1,4608),因此调整了神经网络输入层的数据尺寸。
回想一下-1可以从其他给定维度推断出这个维度。
def forward(self, x):
x = F.relu(self.conv1(x))
x = self.pool(x)
x = x.view(-1, 18 * 16 *16)
x = F.relu(self.fc1(x))
#Computes the second fully connected layer (activation applied later)
#Size changes from (1, 64) to (1, 10)
x = self.fc2(x)
return(x)