【学术】从零开始,教你如何编写一个神经网络分类器

高水平的深度学习库,如TensorFlow,Keras和Pytorch,通过隐藏神经网络的许多乏味的内部工作细节,使深度学习从业者的生活变得更容易。尽管这是深度学习的好方法,但它仍然有一个小缺点:让许多基础理解较差的新来者在其他地方学习。我们的目标是提供从头开始编写的一个隐藏层全连接神经网络分类器(没有深度学习库),以帮助消除神经网络中的黑箱。

项目地址:https://github.com/ankonzoid/NN-from-scratch

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

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

Medium地址:https://medium.com/@ankonzoid Github地址:https://github.com/ankonzoid

我们逐步建立单层神经网络分类器

1.设置n次交叉验证

对于N次交叉验证,我们随机地排列N个样本指标,然后取连续大小为~ N/ n的块作为折叠。每个折叠作为一个交叉验证实验的测试集,补码(complement )指标作为训练集。

2.创建和训练神经网络模型

我们有2个完全连通的权值层:一个连接输入层节点与隐藏层节点,另一个连接隐藏层节点与输出层节点。如果没有任何偏项,这应该是神经网络中权值数量的总和(n_input *n_hidden + n_hidden* n_output)。我们通过对正态分布进行采样来初始化每个权值。

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

(A)正向传递一个训练示例,以更新当前给定节点权值的节点输出。每个节点输出被计算为其上一层输入(无偏项)的加权和,然后是sigmoid传递函数。

(B)反向传递分类错误,以更新当前给出节点权值的节点增量。因为我们使用从L2损失函数应用梯度下降导出的相同的增量规则方程。

(C)我们通过更新节点输出和增量来执行正向传递以更新当前的权值。

训练周期过程为(A)→(B)→(C),对每个训练样本执行该过程。

3.进行类预测

在训练之后,我们可以简单地使用这个模型来对我们的测试样本进行类预测,方法是将文本示例传递给经过训练的神经网络,获取输出的argmax函数。准确性分数是示例(在训练和测试集的n倍交叉验证中)数量的直观分数,在该示例中神经网络分类正确地除以了样本总数。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据科学学习手札

(数据科学学习手札23)决策树分类原理详解&Python与R实现

  作为机器学习中可解释性非常好的一种算法,决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的...

3777
来自专栏鸿的学习笔记

Rolling and Unrolling RNNs

当输入序列被馈送到这样的网络中时,向后的箭头在稍后的步骤将关于早先输入值的信息反馈回系统。我没有在上篇文章中描述的一件事是如何训练这样的网络。所以在这篇文章中,...

752
来自专栏iOSDevLog

决策树

964
来自专栏和蔼的张星的图像处理专栏

4. 经典卷积网络之AlexNet

原文:《ImageNet Classification with Deep Convolutional Neural Networks》 我没有读原文,这个已...

982
来自专栏人工智能

C+实现神经网络之贰—前向传播和反向传播

前言 前一篇文章C++实现神经网络之壹—Net类的设计和神经网络的初始化中,大部分还是比较简单的。因为最重要事情就是生成各种矩阵并初始化。神经网络中的重点和核心...

20110
来自专栏yw的数据分析

R语言通过loess去除某个变量对数据的影响

  当我们想研究不同sample的某个变量A之间的差异时,往往会因为其它一些变量B对该变量的固有影响,而影响不同sample变量A的比较,这个时候需要对samp...

3817
来自专栏有趣的Python

10- 深度学习之神经网络核心原理与算法-卷积核

2084
来自专栏UAI人工智能

深度学习入门第四讲

16211
来自专栏机器学习算法与理论

Tensorflow 实战笔记

tf.Variable(tf.random_normal([2,3],stddev=2)) 通过满足正态分布的随机数来初始化神经网络中的参数是一个常用方法。

722
来自专栏CNN

Tensorflow卷积实现原理+手写python代码实现卷积

从一个通道的图片进行卷积生成新的单通道图的过程很容易理解,对于多个通道卷积后生成多个通道的图理解起来有点抽象。本文以通俗易懂的方式讲述卷积,并辅以图片解释,能快...

993

扫码关注云+社区