TensorFlow实现

devtools/2024/11/17 2:51:07/

TensorFlow将神经网络的这三层顺序串在一起。第二步是你必须让TensorFlow编译模型并问的关键步骤TensorFlow的编译模型是指定你要使用的最后一个函数是什么。在这种情况下,我们将使用稀疏分类交叉熵(是交叉熵损失函数的一种变体,特别适用于具有大量类别的分类问题,尤其在标签(标签是指与输入数据(特征)相对应的输出结果,它们是训练神经网络时用来指导模型学习的目标值。标签通常用于监督学习任务中,告诉模型对于给定的输入数据应该产生什么样的输出。)为整数形式且类别数量众多时非常有用。它与传统的分类交叉熵损失函数的主要区别在于标签的表示方式:传统的分类交叉熵需要将标签进行独热编码,即每个类别被表示为一个长度为类别总数的向量,只有一个位置为1,其余位置为0。而稀疏分类交叉熵则直接使用整数索引来表示标签,这样可以节省空间和计算资源

  • 独热编码(One-Hot Encoding):在传统的分类问题中,如果使用独热编码表示标签,每个类别都需要一个长度等于类别总数的向量,其中只有一个元素为1,其余元素为0。这种方式在类别数量非常多时非常浪费空间,因为大部分元素都是0。
  • 整数索引:相比之下,使用整数索引表示标签只需要一个整数来表示类别,大大减少了存储空间。例如,如果有1000个类别,独热编码需要1000位,而整数索引只需要一个4字节的整数(在大多数情况下)。

)这个神秘的名称。然后指定了最后一个函数,下一步是调用fit函数告诉TensorFlow使用最后一个来拟合你在步骤1中指定的模型,你在步骤中指定的成本函数2到数据集XY.

Epoch是一个技术术语,表示你可能想要运行多少步来创建下降。第一步是指定告诉TensorFlow如何计算推理。第二步是定义编译模块调用哪一个损失函数,第三步是调用函数.

模型训练细节 

  • 成本函数:通常指的是整个训练集上的平均损失。成本函数的目的是最小化,以找到模型的最佳参数。
  • 损失函数:是单个样本的预测值与实际值之间差异的度量。
  • 成本函数:作用于整个数据集,是对所有训练样本损失的平均或总和。
  • 损失函数:作用于单个样本,计算单个样本的误差。

回想逻辑回归函数在给定输入特征x和参数w和b的情况下计算输出,sigmoid函数是应用于W,X加B.如果Z是X的W加B的点积,所以f_x等于

所以第一步是指定逻辑回归的输入到输出函数,这取决于输入x和模型的参数。第二步训练识字回归模型是指定损失函数和成本函数,损失函数说过,如果x的逻辑回归作品f和基本事实结果,实际标签和训练集是y。然后是单个训练示例的损失 

这是对逻辑回归在单个训练示例x上执行情况的衡量标准。给定损失函数的定义,然后我们定义成本函数,成本函数是参数W和B的函数, 

这只是平均整体M训练示例的平均值在M个训练样本X1上计算的损失函数,在约定中我们是使用损失函数是学习算法的输出和地面实况标签的函数,在单个训练示例上计算。而成本函数J是·在整个训练集上计算的损失函数的平均值。这是我们在构建逻辑回归时所做的第二步。训练逻辑回归的第三步是使用算法特别是梯度下降以最小化成本函数J,WB将其最小化为参数W和B的函数。我们使用梯度下降最小化作为参数函数的成本J,其中W为更新为W减去学习率alpha乘以J的导数W和B类似地更新为B减去学习率alpha乘以J对B的导数

在以上三个步骤里,第一步指定如何再给定输入X和参数的情况下计算输出f,第二步指定损失和成本 ,第三步最小化我们训练逻辑回归的成本函数

 第一步是指如何计算给定输入x的输出和用这个应该熟悉的代码片段完成的参数W和B,上周指定了神经网络,这实际上足以指定前向传播所需的计算或以推理算法为例。第二步是编译模型并告诉他你想要什么损失,这是你用来指定此损失函数的代码二元交叉熵损失函数,一旦你指定这个损失取平均值整个训练集还为您提供神经网络的成本函数,第三步是调用函数以尽量减少成本神经网络参数的函数。更详细的了解这三个步骤训练神经网络的上下文。第一步,指定如何在给定输入x和参数w和b的情况下计算输出。此代码片段指定了神经网络的整个架构。他告诉你有

根据这个代码片段,我们也知道参数w1是什么,通过第一层参数第二层参数和第三层参数。此代码片段指定了整个架构神经网络,因此告诉 TensorFlow他需要的一切为了计算输出x作为一个函数。第二步,必须指定什么是损失函数。这也将定义我们用来训练神经网络的成本函数,对于m是0或1,数字分类问题是一个二元分类问题,目前最常见的,我们要使用的的损失函数是这个实际上与我们使用的损失函数相同的逻辑回归是

其中y是真实标签,有时也称为目标标签y,x的f现在是神经网络的输出。在TensorFlow是术语中,这种损失函数称为二元交叉熵。语法是让TensorFlow使用这个损失函数来编译神经网络。另一个历史记录,carers最初是一个图书馆,已经独立开发TensorFlow实际上是与TensorFlow完全不同的项目。但最终他被合并到TensorFlow中,这就是我们有tf.Keras的原因library.losses是此损失函数的名称。在指定了单个训练示例的损失后,TensorFlow知道您想要最小化的成本是平均值, 取所有m个训练样例的平均值,所有训练示例的损失。优化这个函数将导致神经网络适合你的二进制分类数据。如果你想要解决回归问题(回归问题是机器学习中的一种预测任务,其目标是预测一个连续的数值作为输出,回归问题则是预测一个实数值,这个值通常表示某个连续的变量,比如房价、温度、股票价格等)而不是分类问题(分类问题在机器学习中指的是一种任务,其目标是预测数据属于预定义的离散类别中的哪一个,这意味着输出结果是有限的、可数的,并且每个类别之间是互斥的,即一个数据点只能属于一个类别你还可以告诉TensorFlow使用不同的损失函数来编译你的模型。例如,如果你有一个回归问题,并且如果你想要最小化平方误差损失。这是平方误差损失。如果你的算法输出的损失x的f,目标或基本事实标签为y,即平方误差的1.5.然后你就可以在tensorflow中使用这个损失函数,也就是使用更直观的命名为均方误差损失函数然后TensorFlow将尝试最小化均方误差。在这个表达式中,我使用J来表示成本函数.

成本函数是神经网络中所有参数的函数。这就是损失函数与成本函数。在TensorFlow中,这称为二元交叉熵损失函数。在前面为了梯度下降,你需要的关键是计算那些偏导数项。实际上,神经网络训练的标准是使用一种称为反向传播的算法来计算这些偏导数项(偏导数项是指在多元函数中,对其中一个变量求导,而将其他变量视为常数时得到的导数)。ensorFlow可以为你完成所有这些事情。他在这个名为fit的函数中实现了反向传播。你所要做的就是调用model.fit。

sigmoid激活函数的代替方案 

在隐藏层和输入层的所有节点中使用sigmoid激活函数。 在之前我们使用这个方程来计算第二个隐藏单元估计意识的激活

其中g是sigmoid函数,介于0和1之间 

如果想a潜在地采用更大的正值,我们可以换成不同的激活函数。有另一个激活函数叫做ReLU, 

但大部分深度学习的人只是说 ReLU来指代这个g(z)。

还有一个值得一提的激活函数,称为线性激活函数。使用这个有时会说我们没有使用任何激活函数,因为a是g(z)是z,那么a正好等于这个w.x加上b。

如何选择激活函数 

在神经网络中的不同神经元中,取决于目标标签或真是标签y是什么,输出层的激活函数将有一个相当自然的选择,你可以选择不同的激活函数神经网络中的不同神经元,以及在考虑激活函数时对于输出层,事实证明,通常会有一个相当自然的选择,取决于什么是目标或地面实况标签y。如果处理y为零或一的分类问题,所以这是一个二分类问题,然后是sigmoid激活函数几乎总是最自然的选择,因为神经网络学会了预测y等于1的概率,就像我们对逻辑回归所做的那样。建议是,如果正在研究二进制分类的问题,在输出层使用sigmoid。或者你正在解决回归问题,那么您可能会选择不同的激活函数。例:如果试图预测明天的股票价格将如何与今天的股价相比变化,它可以上升或下降,所以在这时推荐线性激活函数。z的g可以可以取正值或负值。如果y只能取非负值,例要预测房子的价格,最自然的将选择是ReLU激活函数,仅此函数只能取零或正值。ReLU激活函数是迄今为止神经网络中最常见的选择。比较ReLU和sigmoid激活函数,ReLU的计算速度更快,因为它只需要i计算0,z,而sigmoid需要取幂,然后取逆等等,所以他效率低。ReLU函数仅在图形的一部分中变平左边是完全平坦的,而sigmoid激活函数他在两个地方变平。如果使用梯度下降来训练神经网络,当你有一个在很多地方都平坦的函数时,梯度下降真的很慢。

为什么模型需要激活函数

如果有一个神经网络像这样多层,并说你要使用线性激活函数所有隐藏层,还使用线性激活函数对于输出层,结果证明这个模型将计算完全等价于线性回归的输出,输出a4可以表示为输入特征x加b的线性函数,或者如果我们依然使用线性激活函数对于所有的隐藏层,但我们要对输出层使用逻辑激活函数,那么你可以证明这个模型等同于逻辑回归,在这种情况下,a4可以表示为

所以这个大型的神经网络没有做任何事情 

多分类问题

多分类问题是指分类问题,你可能有两个以上可能的输出标签,而不仅仅是1或0。

在之前的分类中,逻辑回归模拟的模型结果只有两种。但要是存在多类分类问题,可能像这样

 Softmax

 Softmax回归算法是逻辑回归的推广,这是多类分类上下文的二进制分类算法。

回想一下,如果y只能取两个可能的输出值时,逻辑回归适用0或1,这里的a可以将此解释为y等于的概率1的逻辑回归估计改定那些输入特征x。

在  Softmax中y可以取1,,2,3,4.先求出z1,z2,z3,z4.这是 Softmax回归的参数,接下来,这是  Softmax的公式,我们将计算

如果能学会对这些参数进行适当的选择,那么这为你提供了一种预测y的机会的方法。

aj被解释为模型对y的估计等于j给定输入特征x 

如果n=2那么  Softmax回归最终计算基本相同逻辑回归。参数最终会有所不同,但最终会简化为逻辑回归模型。这就是为什么 Softmax回归模型是逻辑回归的泛化。

现在来看看 Softmax回归的成本函数。之前我们将逻辑回归的成本函数写为然后与之前的成本函数相同模型中的所有参数都是平均损失,是整个训练集的平均值。这是此回归的成本函数。接下来看Softmax回归的成本函数。如果aj非常接近1,那么这个损失将非常小。

神经网络的Softmax输出

为了构建一个可以进行多类分类的神经网络,我们将采用Softmax回归模型和本质上将其放入神经网络的输出层。在一个神经网络中加上一个新的输出层这是一个Softmax输出层。所以有时我们说这个神经网络有一个Softmax输出,或者这个上层是一个Softmax层。在这个神经网络中,前向传播工作是给定输入和之前一样计算到a2,现在计算a3,我们将计算z1到z10,所以这实际上与我们之前用于计算的z的公式非常相似。Softmax层有时也Softmax激活函数,他有点不寻常与我们迄今为止看到的其他激活函数相比,他所算的激活值每一个都取决于z的所有值。

最后看看在tensorflow中如何实现这一点。有三步骤,第一步是告诉tensorflow将三层依次串在一起。第二步是成本函数tensorflow将其称为sparsecategoricalcrossentropy(稀疏分类交叉熵)函数。而对于逻辑回归,我们有binarycrossentropy(交叉熵损失)函数,这里我们使用 sparsecategoricalcrossentropy(稀疏分类交叉熵)函数,这指的是依然将y分类,所以他是分类的,稀疏是指y只能取这10个值之一。第三步是取最小的成本函数

Softmax的改进实现 

回想逻辑回归,如果你想计算给定示例的损失函数,你将首先计算此输出激活a,然后,你将在此处使用此表达式计算损失。实际上,这就是逻辑输出层的代码的样子,这种二元交叉熵损失。如果你允许tensorflow,不必计算a作为中间项。但tensorflow损失的表达式是最下面那个,他与上面的不同就是把a代入了。

想这些公式能使tensorflow能够重新排列术语并计算这种积分值准确的方法。 

多个输出的分类 

有一种不同的类型的分类问题,称为多标签分类问题。假设检测图片中是否有巴士,行人,汽车。训练单个神经网络同时检测汽车,巴士和行人,以为我们要解决三个二分类问题,你可以为输出层中的这三个节点中的每一个使用sigmoid激活函数,

  • 多类分类问题广泛应用于图像识别、语音识别等领域,其中每个样本只属于一个类别。
  • 多标签分类问题适用于文本分类、图像标注等领域,其中样本可以同时拥有多个标签。

高级优化方法 

 梯度下降是一种广泛应用于机器学习的优化算法,并且是许多算法的基础,如线性回归和逻辑回归和神经网络的早期实现。但还有一些其他的优化算法用于最小化成本函数,甚至比梯度下降更好。这是一步梯度下降的表达式。

如果alpha偏小那么移动很慢,我们希望有一个算法可以自动增加alpha,他们只是让它采取更大的步骤并更快的到达最低限度。有一种称为adam算法可以做到这一点,相比之下,如果我们再次使用相同的成本函数并有一个较大的学习率,那也许梯度下降会这样他们会来回震荡,让学习率变小,Adam也可以自动做到这一点,adam算法并没有使用单一的全局学习率alpha。他对模型的每个参数都使用不同的学习率 

其他的网络层类型 

在之前使用的都是密集层类型,事实证明,还有其他类型的图层以及其他属性。另一种层类型称为卷积层。他就是在一层中有很多神经元他们有不同的作用,就是每个神经元它只能看到图像的那个区域。好处,加快了计算速度,使用这种称为卷积层的层的神经网络可以需要更少的训练数据或他也不容易过度拟合。  如果在神经网络中有多个卷积层,有时这被称为卷积层神经网络。比如在一 个神经网络中有两个卷积层最后输出层是用sigmoid(激活)函数。

什么是导数

反向传播算法计算成本函数相对于参数的导数,是神经网络学习中的关键算法。成本函数J=w**2如果w变换特别小epsilon,这会导致J上升k倍epsilon,J的导数就等于k.就像在实施梯度下降时你会反复使用此规则来更新参数w其中alpha是学习率。这意味着,如果导数较小,则此更新会对J进行较小的更新所以我们不必费心去对w做出一个巨大改变,如果导数较大,这意味着,即使w的微小变化对成本函数J会产生很大影响,在这种情况下,我们应该对w做出个更大的变化,这样就可以减少对成本函数J的影响。

  可以使用python来计算导数,可以使用sympy的python包。

 

 计算图

计算图是深度学习中的一个关键概念,他也是tensorflow等编程框架如何自动计算神经网络的导数。 

prop(前向传播)是从左到右的计算,但是计算导数将是从右向左的计算,这就是为什么他被称为back prop (反向传播)。

微积分的链式法则 

 

大型神经网络案例 

将一个计算用计算图表示 

 

 


http://www.ppmy.cn/devtools/134599.html

相关文章

数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用

昨天帮助社区IC训练营学员远程协助解决一个Calibre DRC案例。通过这个DRC Violation向大家分享下Innovus和ICC2中如何批量约束cell的spacing rule。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案 下图所示为T12nm A55项目的Ca…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用: 函数的局部变量和全局变量 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。 money 5000000 n…

MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)

MTU(最大传输单元,Maximum Transmission Unit)是网络中用于表示数据链路层或网络接口上能够传输的最大数据包大小。 1. 工作原理 MTU 决定了一个数据包(包括头部和数据部分)的最大长度。它影响到数据的传输&#xff…

力扣589:N叉树的先序遍历

给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 示例 1: 输入:root [1,null,3,2,4,null,5,6] 输出&…

SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

文章目录 一、配置 RabbitMQ二、自动配置的核心组件三、发送消息至指定 Stream四、接收消息与 RabbitListener 注解五、实现自定义 RabbitListenerContainerFactory六、消息重试机制七、总 结 消息队列在分布式系统中起着至关重要的作用,它能够解耦系统、削峰填谷&a…

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…

UE5材质篇 4 材质表面雨滴打落

materials 101的教程的灵感,特此记录一下 教程里本质上其实是先实验确定了湿滑表面的roughness和specular的值metallic这些,然后根据time来给表面的某些点这几个属性进行变换,主要是roughness和normal的变化 具体的变化是依赖了一张noise&a…

k8s拓扑域 :topologyKey

主要用于定义Pod亲和性或反亲和性规则中的拓扑域,从而控制Pod在集群中的调度。 参数描述:仅支持在工作负载亲和/工作负载反亲和调度策略中使用。先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 to…