深度学习是机器学习的一个分支,被认为是近几十年来研究人员采取的关键步骤。深度学习实现的例子包括图像识别和语音识别等应用程序。两种重要的深度神经网络:卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)。本文主要介绍第一种类型 PyTorch 卷积神经网络(CNN)。

1、卷积神经网络(CNN)

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

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

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

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

  • 局部感受野(Local respective fields)
  • 卷积(Convolution)
  • 池化(Pooling)

下面详细了解这些术语。

2、局部感受野(Local Respective Fields)

CNN利用了输入数据中存在的空间相关性。神经网络并发层中的每一层都连接着一些输入神经元。这个特殊的区域被称为局部接受区。它只关注隐藏的神经元。隐藏神经元将处理上述领域内的输入数据,而不实现特定边界外的变化。

下面提到了生成局部感受野(Local Respective Fields)的图表示:

httpswwwcjavapycom

3、卷积(Convolution)

在上图中,我们观察到每种连接,从一个层到另一层的移动,每个连接都学会了具有相关联的隐藏神经元的重量。 在这里,单个神经元从时刻执行偏移。 这个过程称为“卷积(Convolution)”。

从输入层到隐藏特征映射的连接的映射被定义为 “shared weights(参数共享)”,并且包括的偏差被称为“共享偏置(shared bias)”。

4、池化(Pooling)

卷积神经网络使用池化层,在CNN声明后立即定位。它将用户的输入作为特征图,生成卷积网络并生成压缩特征图。将层池化有助于用先前层的神经元创建层。

5、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)

推荐文档