手把手教你实现神经网络

教育行业A股IPO第一股(股票代码003032)

全国咨询/投诉热线:400-618-4000

In[1]:

In[2]:

#生成数据集并用plot画出np.random.seed(0)X,y=sklearn.datasets.make_moons(200,noise=0.20)plt.scatter(X[:,0],X[:,1],s=40,c=y,cmap=plt.cm.Spectral)

Out[2]:

这里为了演示,我们使用逻辑回归行分类。输入是数据集里的x,y坐标,输出是预测的类别(0或者1)。为了方便我们直接使用scikit-learn中的逻辑回归。

In[3]:

#训练逻辑回归分类器clf=sklearn.linear_model.LogisticRegressionCV(cv=5)clf.fit(X,y)

Out[3]:

In[4]:

#这是个帮助函数,这个函数的作用是用来画决策边界的,如果看不懂函数内容不用介意。defplot_decision_boundary(pred_func):#设置边界最大最小值x_min,x_max=X[:,0].min()-.5,X[:,0].max()+.5y_min,y_max=X[:,1].min()-.5,X[:,1].max()+.5h=0.01#生成一个点间网格,它们之间的距离为hxx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))#预测Z=pred_func(np.c_[xx.ravel(),yy.ravel()])Z=Z.reshape(xx.shape)#绘制轮廓和训练示例plt.contourf(xx,yy,Z,cmap=plt.cm.Spectral)plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.Spectral)

In[5]:

plot_decision_boundary(lambdax:clf.predict(x))plt.title("LogisticRegression")

这个图显示了通过逻辑回归学习到的决策边界。这里的直线已经尽可能的把数据集分成两部分,但是分的效果还是不理想,还是有些分错类别的。

现在我们构建一个3层神经网络,其中包含一个输入层,一个隐藏层和一个输出层。输入层中的节点数由我们的数据的维数确定的,这里是2。输出层中的节点数由我们拥有的类别数量决定,这里也是2。因为我们只有两个类实际上只用一个输出节点可以预测0或1,但是有两个可以让网络更容易扩展到更多的类。网络的输入将是x和y坐标,其输出将是两个概率,一个用于类别0,一个用于类别1。神经网络如图所示:

我们可以选择隐藏层的维度也就是节点数。隐藏层的节点越多,得到的神经网络功能就越复杂。但更高的维度需要付出代价。首先,学习网络参数和预测就需要更多的计算量。同时更多参数也意味着我们得到的模型更容易过拟合。如何选择隐藏层的大小?虽然有一些指导方针,但实际上具体问题需要具体分析,稍后我们将改变隐藏层中的节点数量来查看它如何影响我们的输出。

现在我们把具体代码实现来,这里先定义一些后面求梯度会用到的参数:

In[6]:

num_examples=len(X)#训练集大小nn_input_dim=2#输入层维度nn_output_dim=2#输出层维度#梯度下降参数,这两个参数是为设定的超参数epsilon=0.01#梯度下降的学习率reg_lambda=0.01#正则化强度首先我们实现上面定义的损失函数,这里用它来评估我们的模型的好坏:

In[7]:

In[8]:

In[9]:

下面来看看如果我们训练隐藏层大小为3的网络会发生什么。

In[10]:

#隐藏层大小为3model=build_model(3,print_loss=True)#绘制决策边界plot_decision_boundary(lambdax:predict(model,x))plt.title("DecisionBoundaryforhiddenlayersize3")

Lossafteriteration0:0.432387Lossafteriteration1000:0.068947Lossafteriteration2000:0.068901Lossafteriteration3000:0.071218Lossafteriteration4000:0.071253Lossafteriteration5000:0.071278Lossafteriteration6000:0.071293Lossafteriteration7000:0.071303Lossafteriteration8000:0.071308Lossafteriteration9000:0.071312Lossafteriteration10000:0.071314Lossafteriteration11000:0.071315Lossafteriteration12000:0.071315Lossafteriteration13000:0.071316Lossafteriteration14000:0.071316Lossafteriteration15000:0.071316Lossafteriteration16000:0.071316Lossafteriteration17000:0.071316Lossafteriteration18000:0.071316Lossafteriteration19000:0.071316

这看起来很不错。我们的神经网络能够找到一个成功分离两个类别的决策边界。

在上面的示例中,我们设置了隐藏层大小3,接着看看改变隐藏层大小对结果的影响。

In[11]:

我们可以看到,隐藏层在低维度时可以很好地拟合数据的总体趋势,更高的维度容易过拟合。当隐藏层维度过大时,模型尝试着去“记住”数据的形状而不是拟合他们的一般形状。通常情况我们还需要一个单独的测试集来评估我们的模型,隐藏层维度较小的模型在这个测试集上的表现应该更好,因为这个模型更加通用。我们也可以通过更强的正则化来抵消过度拟合,但是选择一个合适的隐藏层大小是一个比较划算的解决方案。

THE END
1.深度学习中神经网络模型训练常见技巧神经网络训练技巧有哪些深度学习中神经网络模型训练常见技巧 本文介绍了深度学习中神经网络模型训练的关键步骤,包括数据预处理、端到端训练框架设计、随机值管理和权重初始化,以及应对过拟合的策略、优化方法选择、预训练模型利用和超参数优化等,强调了长时间训练和集成学习的重要性。https://blog.csdn.net/l35633/article/details/136110019
2.跟我学AI:第一篇神经网络是如何实现的(二)跟我学AI 作者马少平 AI光影社. AI前沿、基础、应用的权威科普 一篇 神经网络是如何实现的(二) 清华大学计算机系 马少平 第二节:神经元与神经网络 自从听艾博士以数字识别为例讲解了神经网络之后,小明一直想着神经网络如何训练的问题。这天小明又来找艾博士,请教艾博士如何训练一个神经网络。 https://aidc.shisu.edu.cn/5e/57/c13626a155223/page.htm
3.一文搞懂神经网络人工智能是这几年非常火的技术,上至九十九下至刚会走都对人工智能或多或少的了解。神经网络是人工智能的核心,也就是说没有神经网络就没有人工智能,那么这篇文章就带大家学习一下神经网络相关的知识。这篇文章没有数学公式、没有代码,旨在帮助读者快速掌握神经网络的核心知识。 https://www.51cto.com/article/606086.html
4.神经网络除了基本单元的构造外,神经元模型中还有很多参数需要进行学习,如权重和偏置等。权重表示了神经元处理不同输入信号时的重要程度,而偏置则表示了神经元产生输出信号的难易程度,因此这些参数的学习和调整对神经网络的训练和预测精度具有极大的影响。 神经网络的结构 编辑本段 神经网络是由多个神经元(也称节点或单元)组成https://vebaike.com/doc-view-943.html
5.深度学习与神经网络有什么区别?深度学习和神经网络是人工智能领域中的两个重要概念,它们在很多方面有着相似之处,但也存在一些区别。本文将从定义、结构、应用等方面来探讨深度学习与神经网络的区别。 定义 深度学习是一种基于人工神经网络的机器学习算法,在大量数据上训练多层神经网络模型,实现对复杂问题的高效处理。而神经网络则是一种模拟生物神经系https://www.cda.cn/bigdata/201326.html
6.科学家构建深度脉冲神经网络学习框架脉冲神经网络(Spiking Neural Network,SNN)被誉为第三代神经网络,使用更低层次的生物神经系统的抽象。它既是神经科学中研究大脑原理的基本工具,又因稀疏计算、事件驱动、超低功耗的特性,备受计算科学的关注。随着深度学习方法的引入,SNN的性能得到大幅提升,脉冲深度学习(Spiking Deep Learning)成为新兴的研究热点。传统SNhttps://www.cas.cn/syky/202310/t20231011_4973919.shtml
7.人工神经网络(ANN)简述本文是这几天学习人工神经网络入门知识的总结。 我们从下面四点认识人工神经网络(ANN: Artificial Neutral Network):神经元结构、神经元的激活函数、神经网络拓扑结构、神经网络选择权值和学习算法。 1. 神经元: 我们先来看一组对比图就能了解是怎样从生物神经元建模为人工神经元。 https://www.jianshu.com/p/f69e16df2623
8.学习笔记:神经网络学习算法腾讯云开发者社区主流的神经网络学习算法(或者说学习方式)可分为三大类:有监督学习(SupervisedLearning)、无监督学习(Unsupervised Learning)和强化学习(Reinforcement Learning),如下图所示。 注:有监督学习、无监督学习和强化学习并不是某一种特定的算法,而是一类算法的统称。 https://cloud.tencent.com/developer/article/1610502