PyTorch – 卷积神经网络

PyTorch – 卷积神经网络

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

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

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

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

卷积神经网络

卷积神经网络被设计为通过多层阵列来处理数据。这种类型的神经网络被用于图像识别或人脸识别等应用中。

卷积神经网络与其他普通神经网络的主要区别在于,卷积神经网络将输入作为一个二维阵列,并直接对图像进行操作,而不是像其他神经网络那样专注于特征提取。

CNN的主导方法包括解决识别问题。像谷歌和Facebook这样的顶级公司已经投资于识别项目的研究和开发项目,以更快地完成活动。

每个卷积神经网络都包括三个基本概念

  • Local respective fields
  • 卷积
  • 集合

让我们详细了解这些术语中的每一个。

Local respective fields

CNN利用输入数据中存在的空间相关性。神经网络的每个并发层都连接着一些输入神经元。这个特定的区域被称为局部感知场。它只专注于隐藏的神经元。隐性神经元将处理上述区域内的输入数据,而不会意识到特定边界之外的变化。

生成局部各自领域的图示如下

PyTorch - 卷积神经网络

卷积

在上图中,我们观察到每个连接都学习了隐藏神经元的权重,并与从一层到另一层的运动相关联。在这里,各个神经元不时地进行转移。这个过程被称为 “卷积”。

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

集合

卷积神经网络使用池化层,其位置紧随CNN声明之后。它将用户的输入作为卷积网络的特征图,并准备了一个浓缩的特征图。池化层有助于用前几层的神经元创建层。

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程