爆肝万字,终于搞定这篇?神经网络搭建全全全流程!学不会你来找我~一学就会!小白的终极神经网络搭建实战教程!环境设置神经

文中讲解到的板块和对应的实现Python代码,可以很容易地迁移应用于其他类似情况(复制、粘贴、运行),我们对代码做了详尽的注释讲解。

全文的总体内容结构包括:

本篇内容使用到的是TensorFlow工具库。

我们先在终端通过pipinstall命令安装TensorFlow。

pipinstalltensorflow现在我们可以在Notebook上导入TensorFlowKeras并开始编码:

人工神经网络由若干层组成(每一层有独立的输入和输出维度)。这些层可以分组为:

最简单的神经网络形式是感知器,一个只有一层的模型,与线性回归/逻辑回归模型非常相似。

举个例子:假设我们有一个包含N行、3个特征和1个目标变量(二分类,取值0或1)的数据集,如下图所示:

实际上,数据在输入神经网络之前应该进行幅度缩放,我们这里举例的输入数据直接用了0-1之间的值。类似其他机器学习模型,我们使用输入X去预测输出y:

而当我们提到『训练模型』时,我们指的是寻找最佳参数,使得模型预测的结果能最准确地预估目标值。

这里的最佳参数,在不同的情形下,有不同的解释:

我们有一些权重初始化方法,在这里我们采用最简单的随机初始化,然后随着学习的进行调整优化参数。如下图,我们将权重w全部初始化为1:

接下来我们要进行一个简单的计算来对结果进行预估,下面的操作类似于单个神经网络的计算,f(WX+b),其中f函数叫做激活函数。

激活函数是非线性的映射函数,使得神经网络具备强大的非线性拟合学习能力,如下是一些激活函数示意图(当然,实际我们可能会更多地使用ReLU等激活函数)。

加入我们采用上面的阶跃激活函数,那简单的计算过程如下:

我们得到了感知器的输出,这是一个单层神经网络,它接受一些输入并返回1个输出。现在模型的训练将继续通过将输出与目标进行比较,计算误差并优化权重,一遍又一遍地重复整个过程。

总结一下,这就是最简单的神经元,简化的结构表示如下:

可以说所有深度学习模型都是神经网络,但并非所有神经网络都是深度学习模型。一般来说,『深度』学习适用于算法至少有2个隐藏层(因此总共4层,包括输入和输出)。

想象一下在中间层添加3个和刚才一样的神经元:由于每个节点(加权和和激活函数)都返回一个值,我们将得到具有3个输出的隐藏层。

接下来我们使用这3个输出作为第2个隐藏层的输入,第2个隐藏层也同样计算得到3个结果值。最后,我们将添加一个输出层(仅1个节点),用它的结果作为我们模型的最终预测。如下图所示

注意,这些中间层可以具有不同数量的神经元,使用不同的激活函数。每个神经元计算都会有对应的权重,因此添加的层数越多,可训练参数的数量就越大。

完整的神经网络全貌如下图所示:

我们刚才是以口语化的方式来叙述整个神经网络的结构和计算过程的,但实际有一些细节点,包括:

我们使用TensorFlow的highlevelAPI(也就是tensorflow.keras)来快速搭建神经网络。

我们先搭建刚才提到的最简单的感知器结果,它是一个只有一个Dense层的模型。Dense层是最基本的层结构,是一个全连接的结构。

要说明一点的是,如果我们这里要使用阶跃函数作为激活函数,我们需要自己定义(目前Tensorflow中的激活函数不包含这个我们临时设置的函数)

importtensorflowastf#定义激活函数defbinary_step_activation(x):##如果x>0返回1否则返回0returnK.switch(x>0,tf.math.divide(x,x),tf.math.multiply(x,0))#构建模型model=models.Sequential(name="Perceptron",layers=[layers.Dense(name="dense",input_dim=3,units=1,activation=binary_step_activation)])如果我们从感知器转延展到深度神经网络,大家可能会冒出来一些问题,比如:

应该设置多少层?

下图是层数和学习能力的一个示意图。

应该设定多少个神经元?

选用什么激活函数?

我们来解决一个二分类问题,它有N个输入特征和1个二进制目标变量。

我们用函数式方式重写上面的网络,代码如下:

完整的代码如下:

当然,TensorFlow本身也提供了一个绘制模型结构的方法,它不是像上述示例图一样的简单形式呈现,而是输出更多的模型层次信息,下面是我们对深度模型调用plot_model的结果。

下一步是训练我们前面构建的深度学习模型。在tensorflow.keras中,我们需要先对模型『编译』,或者换句话说,我们需要定义训练过程中的一些细节,比如优化器Optimizer、损失函数Loss和评估准则Metrics。其中:

详细的编译代码如下:

#定义评估准则defRecall(y_true,y_pred):true_positives=K.sum(K.round(K.clip(y_true*y_pred,0,1)))possible_positives=K.sum(K.round(K.clip(y_true,0,1)))recall=true_positives/(possible_positives+K.epsilon())returnrecalldefPrecision(y_true,y_pred):true_positives=K.sum(K.round(K.clip(y_true*y_pred,0,1)))predicted_positives=K.sum(K.round(K.clip(y_pred,0,1)))precision=true_positives/(predicted_positives+K.epsilon())returnprecisiondefF1(y_true,y_pred):precision=Precision(y_true,y_pred)recall=Recall(y_true,y_pred)return2*((precision*recall)/(precision+recall+K.epsilon()))#编译神经网络model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy',F1])我们当前是分类问题,如果是回归问题,我们可以选用MAE为损失,将R方作为度量。参考代码如下:

#定义R方评估准则defR2(y,y_hat):ss_res=K.sum(K.square(y-y_hat))ss_tot=K.sum(K.square(y-K.mean(y)))return(1-ss_res/(ss_tot+K.epsilon()))#编译神经网络model.compile(optimizer='adam',loss='mean_absolute_error',metrics=[R2])神经网络的训练,大部分时候,不是一次性把数据都送入模型学习的(因为数据量非常大,通常GPU不足以容纳这种规模的数据,同时全量数据也容易陷入局部最低点)

我们通常会采用一个批次一个批次数据训练的方式,因此在开始训练之前,我们还需要确定Epochs和Batches:其中Epochs代表全量数据迭代的次数,Batches代表单个批次数据样本的数量。

总的数据会拆分为若干批次(每个batch的样本数量越大,您需要的内存空间越多),反向传播和参数更在每批数据上都会进行。一个Epoch是对整个训练集的一次遍历。

如果我们手头有100个样本且batch大小为20,则需要5个batch才能完成1个epoch。batch大小尽量选择为2的倍数(常见:32、64、128、256),因为计算机通常以2的幂来组织内存。

在训练过程中,理想的状态是随着一轮一轮的数据迭代,评估指标在不断改进,损失在逐步减少。不过这个结果只表明在训练集数据上我们在学习,但在新数据上是否有同样的效果并不好确定。因此我们会保留一部分数据(20%左右)用于验证评估。

我们用代码来做说明,我们在这里简单地生成随机数据构建特征数据X和标签数据y,例如

importnumpyasnpX=np.random.rand(1000,10)y=np.random.choice([1,0],size=1000)那我们可以基于下述方式对数据进行训练和评估

#训练和评估training=model.fit(x=X,y=y,batch_size=32,epochs=100,shuffle=True,verbose=0,validation_split=0.2)#绘制评估指标metrics=[kforkintraining.history.keys()if("loss"notink)and("val"notink)]fig,ax=plt.subplots(nrows=1,ncols=2,sharey=True,figsize=(15,3))#训练阶段ax[0].set(title="Training")ax11=ax[0].twinx()ax[0].plot(training.history['loss'],color='black')ax[0].set_xlabel('Epochs')ax[0].set_ylabel('Loss',color='black')formetricinmetrics:ax11.plot(training.history[metric],label=metric)ax11.set_ylabel("Score",color='steelblue')ax11.legend()#验证集评估阶段ax[1].set(title="Validation")ax22=ax[1].twinx()ax[1].plot(training.history['val_loss'],color='black')ax[1].set_xlabel('Epochs')ax[1].set_ylabel('Loss',color='black')formetricinmetrics:ax22.plot(training.history['val_'+metric],label=metric)ax22.set_ylabel("Score",color="steelblue")plt.show()得到的结果图如下所示(下2幅图分别为分类和回归场景下的训练集与验证集的loss和评估准则指标):

实际生产过程中,神经网络效果可能很好,但我们实际是不太方向直接把它当做一个黑盒来用的,我们希望对模型做一些可解释性分析,能部分地理解我们的模型。

具体说来,对于每个样本的预测,我们结合shap都能够估计每个特征对模型预测结果的贡献,进而部分解释问模型的问题『为什么预测这是1而不是0?』(二分类场景)。

参考代码如下:

上图中,在房价预估的回归问题中,影响最大的因素是房屋的面积。

THE END
1.数据挖掘概念(AnalysisServices与以下关系图的突出显示相同,数据挖掘过程的第一步就是明确定义业务问题,并考虑解答该问题的方法。 该步骤包括分析业务需求,定义问题的范围,定义计算模型所使用的度量,以及定义数据挖掘项目的特定目标。这些任务转换为下列问题: 您在查找什么?您要尝试找到什么类型的关系? https://technet.microsoft.com/zh-cn/library/ms174949(en-us,sql.105).aspx
2.深度学习数据挖掘的关系mob64ca12f66e6c的技术博客下图是深度学习模型与数据挖掘过程的序列图: 结尾 以上便是有关深度学习与数据挖掘之间关系的基本流程及其代码实现。在整个过程中,深度学习能够为我们提供强大的预测能力,而数据挖掘则提供了将这些预测结果转化为实际知识的能力。希望这篇文章能够帮助你理解二者之间的关系,并给你在未来的学习和工作中提供指导。通过不断https://blog.51cto.com/u_16213457/12827856
3.数据仓库与数据挖掘实验报告,演示范文聚类分析挖掘过程图解26 3.2 数据集挖掘结果https://www.360wenmi.com/f/file815v1res.html
4.CNN深入浅出讲解卷积神经网络(介绍结构原理)全连接层往往在分类问题中用作网络的最后层,作用主要为将数据矩阵进行全连接,然后按照分类数量输出数据,在回归问题中,全连接层则可以省略,但是我们需要增加卷积层来对数据进行逆卷积操作。 3、CNN的训练过程图解 ?图7 CNN的训练过程图解 前向传播阶段: https://blog.csdn.net/kevinjin2011/article/details/124944728
5.scikitlearn中的无监督聚类算法fifbroK 均值聚类(K-Means Clustering)是最基础和最经典的基于划分的聚类算法,是十大经典数据挖掘算法之一。它的基本思想是,通过迭代方式寻找K个簇的一种划分方案,使得聚类结果对应的代价函数最小。特别地,代价函数可以定义为各个样本距离所属簇中心点的误差平方和(SSE)。 https://www.cnblogs.com/xc-family/p/11006525.html
6.图解机器学习KNN算法及其应用实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击这里获取本文[40]图解机器学习 | KNN算法及其应用『房屋出租价格预测数据集』 ?ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub 5.1 分类过程 已知的数据集中,每个已出租住房都有房间数量、厕所数量、容纳人数等字段,并有对应https://www.showmeai.tech/article-detail/187
7.mes系统图解零代码企业数字化知识站MES系统能够采集生产过程中的各种数据,如设备运行数据、生产进度数据、质量数据、库存数据等,并进行数据处理和分析,提供各种数据报表和分析结果,帮助管理层了解生产现场的情况,做出相应的决策。数据采集与分析模块还可以进行数据挖掘,发现生产过程中的潜在问题,找出问题的根本原因,进行持续改进。通过数据采集与分析,MES系统https://www.jiandaoyun.com/blog/article/513306/
8.CAUP70年袁烽孙童悦:数字包豪斯——同济建筑的建构教育与实践在这个过程中,数据信息在模拟与现实之间构建了沟通的桥梁。通过数字孪生技术与智能建造机器人,设计师能够以一种高自由度、高精度、高效率的方式,达成设计方案和建造结果之间的无缝衔接(见图8)[49]。 8.数字包豪斯建筑设计智能链方法图解 这一套智能链设计与建造流程,在乌镇“互联网之光”博览中心的项目中得到了https://caup.tongji.edu.cn/b6/91/c33419a308881/page.htm
9.会计档案电子化的发展历程5. 云计算和大数据时代:近年来,云计算技术和大数据分析的广泛应用,使得企业能够更好地利用电子化的会计档案进行数据挖掘和分析,为业务决策提供更有力的支持。 总的来说,会计档案电子化的发展历程与信息技术的进步、法规标准的制定以及商业需求的不断演进密切相关。未来随着人工智能、区块链等新型技术的应用,会计档案的https://www.huatuxx.com/xinwen/12747.html
10.www.tjxuansheng.com/yyys/19790361.htm客户航司真实的使用体验、详尽的运行数据、各环节的反馈等,均有助于飞机的创新和完善。同时,航司运营服务带给旅客的全方位体验,也将参与一款飞机在大众眼中的形象塑造。!$| 更何况,很多卖家的申诉过程也说不上顺利,他们大多在申诉的过程中感受到孤立无援,发起申诉像是主动走进一个"自证陷阱"。&“/ http://www.tjxuansheng.com/yyys/19790361.htm
11.FCS24大模型生成式信息抽取综述受约束的自回归生成(Constrained decoding generation):指的是在生成文本时,遵循特定的约束或规则的过程。 小样本学习(Few-shot learning):小样本学习仅能访问少量带标注的示例,因此面临诸如过拟合以及难以捕捉复杂关系等挑战。 监督微调(Supervised fine-tuning):利用所有训练数据对大语言模型进行微调是最常见且最有前景https://zhuanlan.zhihu.com/p/12045694510
12.内蒙古科技大学研究生招生专业课考试大纲内蒙古科技大学2019年研究生招生专业课考试大纲 学院代码:001 学院:材料与冶金学院 联系电话:0472-5951571学院代码:002 学院:矿业研究学院 联系电话:0472-5954307https://www.xuanxiao100.cn/xuanxiao/1114055.html
13.Python3Gdal手把手教你给Anaconda的Python安装GdalGDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。 该库在C/C++/python/ruby/VB/java/C#(这个暂时不完全支持)下都能用。 电脑环境准备 Anaconda版本: Python版本: Gdal安装过程 1.首先打开Anaconda Prompt: https://cloud.tencent.com/developer/article/1621201
14.AndroidContentProvider的启动过程[图解]Android源码分析——ContentProvider的启动过程 ContentProvider的启动过程ContentProvider的启动过程一.query方法调用AMS ContextWrapper.java中getContentResolver方法的ContentProvider用于进程内和进程间的数据共享。 当ContentProvider没有启动,调用其增删查改中的任意一个方法,都会启动ContentProvider。一.query方法 https://www.pianshen.com/article/70621376230/
15.教学评价系统范文12篇(全文)根据前面的分析可知,整个数据挖掘过程主要同由三个阶段组成:数据准备数据预处理、结果的分析和解释。如下图7所示。数据准备这一步骤很重要,它决定着数据挖掘的成功对于数据挖掘的成功,数据准备大致分为3步:数据集成、数据选择、数据整合。知识析取是数据挖掘的技术核心,它是在确定挖掘任务的基础上,将准备好的数据进行https://www.99xueshu.com/w/ikey2hgovcxk.html
16.详解SQLServer2008R2数据库SSAS建模及扩展能力mssql2008SQLServer 2008 R2数据库中提供的SSAS建模工具包括包括SQL Server Management Studio 和Business Intelligence Development Studio,那么建模的过程是怎样的呢?本文我们就来介绍这些,接下来就让我们来一起了解一下SQLServer 2008 R2数据库的建模工具和关键过程以及数据挖掘、权限和访问接口等的知识吧。 https://www.jb51.net/article/71205.htm
17.软考高级——信息系统项目管理师(第4版)思维导图模板数字化管理。数字化管理是企业通过打通核心数据链,贯通制造全场景、全过程,基于数据的广泛汇聚、集成优化和价值挖掘, T化、剧新门千里北业战略决策、产品研发、生产制造、经营管理、市场服务等业务活动,构建数据驱动的高效运营管理新模式。 车联网 车联网是新一代网络通信技术与汽车、电子、道路交通运输等领域深度融合https://www.processon.com/view/654c455f8f11b40fe56ece43
18.数据挖掘的步骤包括什么数据挖掘是一个通过特定算法对大量数据进行处理和分析,以发现数据中的模式、趋势或关联性的过程。下面详细介绍数据挖掘的步骤包括什么? 1、数据收集 首先,需要收集与待挖掘主题相关的数据。可能涉及从各种来源(如数据库、文件、网络等)获取数据,并将其清洗、整合到一个统一的格式中。 https://www.pxwy.cn/news-id-81213.html
19.数据挖掘的六大过程数据挖掘的六大过程通常包括:数据清洗、数据集成、数据选择、数据变换、数据挖掘、模式评估。 这六个过程构成了一个系统而复杂的工作流程,旨在从大量数据中提取有用的模式和知识,支持决策和预测。 以下是每个过程的详细解释: 一、数据清洗 定义:数据清洗是对原始数据进行预处理的过程,旨在解决数据缺失、不一致、噪声等https://www.ai-indeed.com/encyclopedia/10656.html