Sklearn 与 TensorFlow 机器学习实用指南——第十三章习题答案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yanying1113/article/details/86559955

Sklearn 与 TensorFlow 机器学习实用指南——第十三章习题答案


本文对十三章卷积神经网络的习题部分进行解答。

  1. 对于图像分类CNN相对于完全连接的DNN有什么优势?
    由于卷积层仅部分连接,并且因为它大量重用其权重,因此CNN比完全连接的DNN具有更少的参数,这使得训练更快,降低过度拟合的风险,并且需要更少的训练数据。
    当CNN学会了可以检测特定特征的卷积核时,它可以在图像的任何位置检测到该特征。相反,当DNN在一个位置学习一个特征时,它只能在该特定位置检测到它。由于图像通常具有重复的特征,因此使用较少的训练示例,CNN能够比DNN更好地用于图像处理任务(例如分类)。
    DNN没有关于像素的组织方式的鲜艳知识; 它不知道附近的像素是否接近。CNN的结构嵌入了这一先验知识。较低层通常识别图像的小区域中的特征,而较高层将较低层特征组合成较大特征。这适用于大多数自然图像。

  2. 考虑由三个卷积层组成的CNN,每个卷积层具有3×3卷积核,步长为2,以及SAME填充。 最低层输出100个特征图,中间一个输出200,顶部输出400.输入图像是200×300像素的RGB图像。CNN中的参数总数是多少?如果我们使用的是32位浮点数,那么在对单个实例进行预测时,该网络至少需要多少RAM? 什么时候对50个图像的小批次进行训练?
    这是一个非常典型的计算参数的问题。 由于其第一个卷积层具有3×3卷积核,并且输入具有三个通道(红色,绿色和蓝色),因此每个特征图具有3×3×3权重,加上偏置项。那么每个特征图(feature map)有28个参数。 由于该第一卷积层具有100个特征图(feature map),因此它具有总共$(3\times3\times3+1)\times100=2,800$个参数。第二卷积层具有3×3卷积核,其输入是前一层的100个特征映射的集合,因此每个特征映射具有3×3×100 = 900个权重,加上偏差项。由于它有200个特征图,因此该层具有901×200 = 180,200个参数。最后,第三层和最后一层卷积层也有3×3卷积核,其输入是前一层的200个特征图的集合,因此每个特征图具有3×3×200 = 1,800个权重,加上一个偏置项。 由于它有400个特征图,因此该层总共有1,801×400 = 720,400个参数。所以,CNN有2,800 + 180,200 + 720,400 = 903,400个参数。
    现在我们计算这个神经网络在对单个实例进行预测时需要多少RAM(至少)。首先让我们计算每一层的特征图大小。由于我们使用步长为2和SAME填充方式,因此特征图的水平和垂直尺寸在每一层被除以2(如果需要,可以向上舍入),因此输入通道为200×300像素,第一层的特征图是100×150,第二层的特征图是50×75,第三层的特征图是25×38。因为32位是4字节而第一卷积层有100个特征图,所以第一层占用4×100× 150×100 = 600万字节(约5.7MB,考虑到1 MB = 1,024 KB和1 KB = 1,024字节)。第二层占用4×50×75×200 = 300万字节(约2.9MB)。最后,第三层占用4×25×38×400 = 1,520,000字节(约1.4MB)。但是,一旦计算了一个层,就可以释放前一层占用的内存,所以如果一切都经过优化,那么只需要6 + 3 = 900万字节(约8.6MB)的RAM(当第二层已被计算,但第一层占用的内存尚未释放)。还需要加上CNN参数占用的内存。我们之前计算过它有903,400个参数,每个参数使用4个字节,所以这增加了3,613,600个字节(大约3.4 MB)。所需的总RAM是(至少)12,613,600字节(约12 MB)。
    最后,让我们计算在一批50张图像上训练CNN时所需的最小RAM量。在训练期间,TensorFlow使用反向传播,这需要保持在前向传递期间计算的所有值,直到反向传递开始。因此,我们必须计算单个实例的所有层所需的总RAM,并将其乘以50。那时让我们开始兆字节而不是字节计数。我们之前计算过,每个实例的三层分别需要5.7,2.9和1.4MB。这总共是10.0 MB的实例。因此,对于50个实例,总RAM为500 MB。再加上输入图像所需的RAM,即50×4×200×300×3 = 36百万字节(约34.3 MB),加上模型参数所需的RAM,大约3.4 MB(先前计算过的),加上梯度的一些RAM(我们会考虑它们,因为它们可以逐渐释放,因为反向传播会在反向传递过程中逐渐向下传播)。我们总共大约500.0 + 34.3 +3.4 = 537.7 MB。这个保守估计的最低限度。

  3. 如果您的GPU在训练CNN时内存不足,你可以采取哪几种措施尝试解决问题?
    减少批量大小
    在一个或多个图层中使用更大的步幅减少维度
    删除一个或多个图层
    使用16位浮点数而不是32位浮点数
    分配CNN到多个设备上
    当然,你也可以买具有更多RAM的GPU。

  4. 为什么要添加最大池层而不是具有相同步幅的卷积层?
    最大池层根本没有参数,而卷积层有很多参数,另外池化也可以减少输出层的大小。

  5. 您何时想要添加局部响应规范化层?
    局部响应归一化层使得相同位置的神经元强烈激活但在相邻特征图中抑制神经元,这促使不同的特征图专门化并将它们分开,迫使它们探索更广泛的特征。通常在较低层中使用,以具有较大的低级特征池。

  6. 与LeNet-5相比,AlexNet的主要创新是什么?googLeNet和ResNet的主要创新是什么?
    与LeNet-5相比,AlexNet的主要创新是:(1)它更大更深,(2)它将卷积层直接叠加在一起,而不是在每个卷积层的顶部堆叠池化层。 GoogLeNet的主要创新是初始模块(Inception model)的引入,这使得有可能比以前的CNN架构具有更深的网络,参数更少。最后,ResNet的主要创新是跳过连接的引入,这使得它可以超越100层。可以说,它的简洁性和一致性也相当具有创新性。

猜你喜欢

转载自blog.csdn.net/yanying1113/article/details/86559955