查看原文
其他

从0开始:神经网络分类器

2017-11-09 周期 大数据应用

原文作者:Anson Wong

原文链接:https://towardsdatascience.com/coding-up-a-neural-network-classifier-from-scratch-977d235d8a24

翻译:周期

A single-layer fully-connected neural network used forclassification

高级深层学习库,如TensorFlow,Keras和Pytorch,通过隐藏神经网络的许多繁琐的内在细节,使深度学习实践者的生活更加轻松。与此同时随之而来的缺点是让许多初学者对基础理解无法深入,要在其他地方学习。

 

我们的目标只是提供一个从头开始编写的隐藏层完全连接的神经网络分类器(没有深度学习库),以帮助消除神经网络中神秘的黑匣子感觉。该项目的Githubrepo是:


https://github.com/ankonzoid/NN-from-scratch


所提供的神经网络对描述属于三类小麦的内核的几何属性的数据集进行分类(你可以轻松地将其替换为你自己的自定义数据集)。假设一个L2丢失函数(lossfunction),并且在隐藏和输出层中的每个节点上使用S形传递函数(sigmoidtransfer function)。权重更新方法使用具有L2范数的梯度下降(gradient descent)的增量规则(deltarule)。


对于本文的其余部分,我们概述了我们的代码为构建和训练神经网络进行类预测所采取的一般步骤。关于深入学习和加强学习的博客,教程和项目,请查看我的Medium和我的Github。


01设置n-fold 交叉验证(cross-validation


对于我们的n倍交叉验证,我们随机排列所有N个示例索引,然后将大小为N / n的连续块作为折叠。每个折叠用作许多交叉验证实验之一的测试集,补体指数用作训练集。


02建立和训练神经网络模型


我们有2个完全连接的权重层:一个连接输入层节点与隐藏层节点,一个连接隐藏层节点与输出层节点。没有任何偏差条件,这应该总共在网络中的(n_input* n_hidden + n_hidden * n_output)权重数量。我们通过采样正态分布来初始化每个权重。


每个节点(神经元)具有存储到存储器的3个属性(attributes):连接到其输入节点的权重列表,从前向传递一些输入计算出的输出值,以及在输出端的反向传播(backward-propagating)分类不匹配中表示其误差的增量值层。这3个属性是相互交织的,并通过以下三个过程循环进行更新:


(A)给出我们当前节点权重,向前传递训练集来更新节点输出。每个节点输出被计算为其先前的层输入(无偏置项)的加权和,后跟S形传递函数。


(B)给定我们当前节点权重的向后分类误差更新节点增量。要了解更多关于这些增量(deltas)的信息,我们建议您阅读https://en.wikipedia.org/wiki/Delta_rule,因为我们使用从L2损失函数应用梯度下降导出的相同的增量(delta)规则方程。


(C)我们使用更新的节点(node)输出和增量(delta)来执行前进更新当前权重。


(A)→(B)→(C)的训练周期过程对每个训练样本的每个训练示例进行。

03做出分类预测


在训练之后,我们可以简单地使用这个模型来对我们的测试例子进行分类预测,方法是将接收到的输出的argmax从文本示例转发到训练有素的神经网络中。精确度分数是正确分类的数量除以总数(在n次交叉验证的训练和测试集合中)的示例数量的直观分数。



您也许还想看看

有点意思:一篇关于词嵌入(Word Embedding)的介绍

今天拿到新手机的壕们:除了iPhone X的Face ID,面部识别还有哪些应用?

【求职专栏】一路披荆斩棘,我是如何成功拿到四大Data Scientist offer的?

四大电子商务公司的人工智能大比拼

11/4公开课 | 转行Data Scientist? 与Kaggle Master探讨如何拿到奖牌使简历脱颖而出




点击“阅读原文”查看数据应用学院核心课程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存