《深度学习图片》一书。人工智能视觉指南

图片嗨,habrozhiteli!深度学习已成为处理人工智能的强大引擎。生动的插图和简单的代码示例将使您免于深入研究构建深度学习模型的复杂方面,从而使复杂的任务更容易获得且变得有趣。



约翰·克罗恩(John Krohn),格兰特·贝弗勒(Grant Beileveld)和出色的插画家插图画家阿格拉·巴森斯(Aglae Bassens)使用生动的示例和类比来解释什么是深度学习,深度学习为何如此流行以及该概念与其他机器学习方法之间的关系。这本书是希望将深度学习应用于其工作的开发人员,数据科学家,研究人员,分析师和有抱负的程序员的理想选择。在Jupyter笔记本中,理论计算得到了Python应用程序代码的完美补充。您将学习在TensorFlow和Keras中创建高效模型的技巧,并熟悉PyTorch。



深度学习的基础知识将使您可以创建真实的应用程序-从计算机视觉和自然语言处理到图像生成和游戏算法。



Keras中间深度网络



结束本章,我们将把新的理论知识体现到神经网络中,看看我们是否可以在对手写数字进行分类方面超越以前的shallow_net_in_keras.ipynb模型。



Jupyter的intermediate_net_in_keras.ipynb笔记本中的前几个步骤与其前身浅层网络的步骤相同。首先,加载相同的Keras依赖项,并以相同的方式输入和处理MNIST数据集。如清单8.1所示,有趣的部分开始于定义神经网络的体系结构。



清单8.1 定义深度中等的神经网络架构的代码



model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(784,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))


此代码段的第一行,模型= Sequential(),与先前的网络相同(清单5.6);它是神经网络模型对象的实例。下一行开始出现差异。在其中,我们按照第6章中的建议,将第一隐藏层中的激活函数sigmoid替换为relu函数。第一层的所有其他参数(激活函数除外)保持不变:它仍然由64个神经元组成,并且输入层的尺寸保持不变- 784个神经元。



与清单5.6中的浅层体系结构相比,清单8.1中的另一个重大变化是存在第二个人工神经元隐藏层。通过调用model.add()方法,我们毫不费力地添加了第二个Dense层,其中包含64个Relu神经元,从而使记事本名称中的中间单词变得合理。通过调用model.summary(),您可以看到,如图所示。8.9与浅层架构相比,此附加层增加了4,160个附加训练参数(见图7.5)。参数可以分为:



  • 4096个权重对应于第二个隐藏层中的64个神经元与第一个隐藏层中的64个神经元的键(64×64 = 4096);
  • 加上64个偏移量,第二个隐藏层中的每个神经元一个偏移量;
  • 结果是4160个参数:n个参数= nw + nb = 4096 + 64 =

    = 4160。


除了更改模型的体系结构之外,我们还更改了模型的编译选项,如清单8.2所示。



清单8.2。中深度神经网络编译码



model.compile(loss='categorical_crossentropy',
                      optimizer=SGD(lr=0.1),
                      metrics=['accuracy'])


图片


这些行来自清单8.2:



  • 根据交叉熵设置成本函数:loss ='categorical_crossentropy'(在浅层网络中,使用二次值loss ='mean_squared_error');
  • 定义随机梯度下降方法以最小化成本:优化程序= SGD;
  • 确定学习速度的超参数:lr = 0.1 (1)
  • , , Keras , : metrics=['accuracy'](2).


(1) , , .



(2) , , , , , . , , , . , , : , (, « 86 »), (« 86 , »).


最后,我们通过运行清单8.3中的代码来训练中间网络。

清单8.3。中级深度神经网络训练代码



model.fit(X_train, y_train,
              batch_size=128, epochs=20,
              verbose=1,
              validation_data=(X_valid, y_valid))


与浅层网络相比,在训练中间网络方面唯一发生变化的地方(请参见清单5.7)是将超参数时代减少了200个到20个数量级。正如您将在后面看到的,更有效的中间体系结构需要更少的时代来进行训练。



图片


在图。8.10显示了网络培训的前四个时期的结果。您可能还记得,我们的浅层架构经过200个时期后,验证数据的准确性达到了86%的稳定水平。中间深度网络大大超过了它:如val_acc字段所示,在第一个训练时期之后,该网络达到了92.34%的准确性。在第三个时代之后,准确性超过了95%,到第20个时代,它似乎已经达到了约97.6%的平稳期。我们已经取得了重大进展!



让我们更详细地检查model.fit()的输出,如图2所示。8.10:



  • 在469个“培训周期”中填写了以下所示的过程指示器(请参见图8.5):

    60000/60000 [======================== ======]
  • 1s 15us/step , 469 1 , 15 .
  • loss . 0.4744 (SGD) , 0.0332 .
  • acc — . 86.37% 99% . , .
  • , (val_loss), , 0.08 .
  • (val_acc). , 97.6%, 86% .




在本章中,我们做得很好。我们首先了解了具有固定参数的神经网络如何处理信息。然后,我们选择了相互作用的方法-成本函数,随机梯度下降和反向传播,这使您可以调整网络参数以近似于与某些输入x有连续关系的y的真值。在此过程中,我们熟悉了一些超参数,包括学习速度,程序包大小和培训时代的数量,以及设置每个参数的实用规则。在本章的最后,我们应用了新知识创建了一个中间深度的神经网络,在对手写数字进行分类的相同任务中,该神经网络大大超过了以前的浅层网络。接下来,我们将熟悉随着人工神经网络加深而提高其稳定性的方法,这将使我们能够开发和训练成熟的深度学习模型。



»有关这本书的更多详细信息,请参见出版商的网站

» 目录

» 摘录



给居住者的优惠券可享受25%的折扣- 深度学习



在为该书的纸质版本付款后,会向该电子邮件发送一本电子书。



All Articles