PyTorch卷积神经网络

PyTorch卷积神经网络

深度学习是机器学习的一个分支,它是近几十年来研究人员突破的关键步骤。深度学习实现的示例包括图像识别和语音识别等应用。

下面给出了两种重要的深度神经网络 -

  • 卷积神经网络
  • 递归神经网络。

在本章中,我们将关注第一种类型,即卷积神经网络(CNN)。

卷积神经网络

卷积神经网络旨在通过多层阵列处理数据。这种类型的神经网络用于图像识别或面部识别等应用。

CNN与任何其他普通神经网络之间的主要区别在于CNN将输入视为二维阵列并直接在图像上操作,而不是关注其他神经网络关注的特征提取。

CNN的主导方法包括识别问题的解决方案。谷歌和Facebook等顶级公司已投资于认可项目的研发项目,以更快的速度完成活动。

每个卷积神经网络都包含三个基本思想 -

  • 本地接收字段
  • 卷积

下面来详细了解每个术语。

1. 本地接收字段

CNN利用输入数据中存在的空间相关性。神经网络的并发层中的每一层都连接一些输入神经元。此特定区域称为本地接收字段。它只关注隐藏的神经元。隐藏的神经元将处理所提到的字段内的输入数据,而没有实现特定边界之外的变化。

生成本地相应字段的图表表示如下 -

2. 卷积

在上图中,我们观察到每个连接都学习隐藏神经元的权重,并且具有从一个层到另一个层的移动的相关连接。在这里,各个神经元不时地进行转换。这个过程叫做“卷积”。

从输入层到隐藏特征映射的连接的映射被定义为“共享权重”,并且包括的偏差称为“共享偏差”。

3. 池

卷积神经网络使用在CNN声明后立即定位的汇集层。它将来自用户的输入作为特征映射,其来自卷积网络并准备精简的特征映射。池化层有助于创建具有先前层的神经元的层。

4. PyTorch实现

以下步骤用于使用PyTorch创建卷积神经网络。

第1步

导入必要的包以创建简单的神经网络。

from torch.autograd import Variable
import torch.nn.functional as F

第2步
使用卷积神经网络的批处理表示创建一个类。输入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步

计算从(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)