(23)BackPropagation.py的实现

(23)BackPropagation.py的实现

BackPropagation.py的实现。

Back Propagation是神经网络最精髓的部分。我们自研盘古框架的BackPropagation的思维和TensorFlow和PyTorch的思维是一样的。这里从零起步编写BackPropagation.py代码。

BackPropagation.py的实现思路:

第一步: 从误差的结果出发,从最右侧到最左侧(不包含输入层Input Layer)遍历整个神经元网络Neuron Network构成的链条Chain;

第二步:在遍历的时候计算每个神经元Neuron对误差结果应该负的责任;

第三步:进行Derivative求导计算;

第四步:通过梯度下降算法Gradient Desendent来调整权重Weights的值以减少预测的误差。

具体实现步骤:

  • 因为要应用ForwardPropagation,首先将service.ForwardPropagation导入。
  • num_of_features记录输入的Features的个数,这里instance有4条记录,len(instances[0])可获取第一条记录的长度,由于instance的最后一列是Real Result真实结果值,因此计算len(instances[0]) - 1 为输入的Features的个数。
  • 接下来循环遍历所有的Training Dataset ,完成一个Epoch 并进行每个节点所负责的Error误差的记录。

(1)   ForwardPropagation.applyForwardPropagation(nodes, weights, instances[i])初始化Nodes状态。

Create_AI_Framework_In5Classes(Day2)版本的ForwardPropagation.py代码:

import math

Create_AI_Framework_In5Classes(Day3)版本的ForwardPropagation.py代码,与Create_AI_Framework_In5Classes(Day2)版本相比:

·          上段代码中第4行以后新增代码,新增返回神经元节点信息。

return nodes 

在Create_AI_Framework_In5Classes(Day3)版本的BackPropagation.py代码中应用一次ForwardPropagation.applyForwardPropagation方法,获取神经元节点集。

…….

ForwardPropagation.applyForwardPropagation这段代码实现的原理机制如图所示,假设神经元网络有4层,输入层(2个输入节点)、隐藏层有2层(第1层隐藏层有3个神经元节点,第2层隐藏层有2个神经元节点),输出层1层。

www.zeeklog.com  - (23)BackPropagation.py的实现

图 1- 36神经元网络

每个神经元由两个单元组成。一个是权重和输入信号,另一个是非线性单元激活函数。信号e是激活信号,y = f(e) 是非线性单元的输出,即是神经元的输出。

www.zeeklog.com  - (23)BackPropagation.py的实现


图 1- 37激活函数示意图

为了训练神经网络,我们需要训练数据。训练数据由输入信号(x1 、x2 )和期望输出结果z组成。网络的训练过程是一个迭代处理的过程。训练数据集用来在每次迭代过程中更新神经元的权重。每次学习过程从训练数据的输入信号开始,我们可以得出每一层的输出。如图所示信号在神经网络中的传输路线。W(Xm)n 表示神经元Xm 在第n层输入的连接权重,Yn 表示神经元n的输出;Wmn 代表输出神经元m和输入神经元n的连接权

重。

www.zeeklog.com  - (23)BackPropagation.py的实现


图 1- 38  ForwardPropagation.applyForwardPropagation 传播示意图


类似的,我们的盘古自研框架applyForwardPropagation也是同样的Forward Propagation过程,instances每一行记录有2个特征值,输入instances数据,从输入层Input Layer开始,经过若干层的隐藏层HiddenLayers(例如hidden_layers = [8,4,2]),最后得出输出层Output Layer的值。

(1)   最后一个节点的值是预测值,我们通过predicted_value = nodes[len(nodes) - 1].get_value()获取预测值。

(2)   actual_value = instances[i][num_of_features]获得当前instance的Real Value实际值。

(3)   计算误差minor_error = predicted_value - actual_value:计算预测值和真实值之间的误差。

(4)   然后设置输出节点nodes[len(nodes)-1].set_minor_error(minor_error)的误差值。因为误差要不断更新的,所以我们在Node.py要设置这个方法。



Read more

Django执行查询-比较对象

Django执行查询-比较对象

Django执行查询-比较对象 * Django执行查询-比较对象 在Django中,执行数据库查询是开发过程中的一项重要任务。Django的ORM(对象关系映射)系统提供了一套简洁而强大的API,允许我们以面向对象的方式与数据库交互。当我们需要比较对象时,Django的查询API同样提供了丰富的选项。 一、基本查询与比较 Django的查询通常基于模型的Manager对象进行。每个Django模型都有一个Manager,它负责执行数据库查询。例如,假设我们有一个Person模型,我们可以这样查询年龄大于30的人: people_over_30 = Person.objects.filter(age__gt=30) 在这个例子中,filter方法用于构建查询,age__gt=30是一个查询条件,表示“年龄大于30”。Django使用双下划线(__)来表示字段查找类型的特殊操作。在这个例子中,gt是“greater than”(大于)的缩写。 Django的查询API不仅限于简单的比较操作,它还提供了一系列字段查找类型,比如__lt(小于)、__in(在列表中

By Ne0inhk
Django执行查询-删除对象

Django执行查询-删除对象

Django执行查询-删除对象 * * * * * Django执行查询-删除对象 在Django框架中,执行数据库查询和删除操作是日常开发中经常遇到的任务。Django的ORM(对象关系映射)系统提供了一套强大且易用的API,使得这些操作变得简单而高效。下面我们将详细解析如何在Django中执行查询和删除对象的操作。 查询对象 Django的查询集(QuerySet)API提供了丰富的查询功能,允许你以多种方式从数据库中检索对象。 下面是一些基本的查询示例: 1. 获取所有对象 all_objects = MyModel.objects.all() 2. 基于条件筛选对象 filtered_objects = MyModel.objects.filter(field_name='value') 3. 排除某些对象 excluded_objects = MyModel.objects.exclude(field_name='value') 4. 获取单个对象(如果确定只有一个匹配项) single_

By Ne0inhk
Django执行查询-复制模型实例

Django执行查询-复制模型实例

Django执行查询-复制模型实例 * * * * Django执行查询-复制模型实例 在Django框架中,经常需要对数据库中的模型实例进行查询和操作。其中,复制模型实例是一个常见的需求,尤其是在处理需要修改原始数据但又不想影响原始记录的场景时。本文将详细解析在Django中如何执行查询以及复制模型实例的操作。 一、执行查询 在Django中,执行查询主要依赖于Django ORM(对象关系映射)。ORM提供了一种机制,使得开发者可以使用Python代码来操作数据库,而无需编写原始的SQL语句。 1. 查询单个对象 可以使用get()方法根据模型的某个字段查询单个对象。例如,假设有一个Person模型,包含name和age字段,我们可以这样查询名为"Alice"的Person对象: person = Person.objects.get(name="Alice") 如果查询的结果不存在或存在多个,get()方法会抛出DoesNotExist或MultipleObjectsReturned异常。 2. 查询多个对象 如果要查询多个对象,

By Ne0inhk
Django执行查询-一次修改多个对象

Django执行查询-一次修改多个对象

Django执行查询-一次修改多个对象 * Django执行查询-一次修改多个对象 在Django框架中,经常需要对数据库中的多个对象执行批量操作,例如修改多个对象的某个字段。相比于逐一获取每个对象并单独修改,使用Django的ORM(对象关系映射)提供的方法可以更高效地完成这项任务。本文将详细介绍如何在Django中执行一次查询来修改多个对象。 1. 使用QuerySet的update方法 Django的QuerySet对象提供了update()方法,它允许你一次修改多个对象而无需将它们全部加载到内存中。这对于处理大量数据时非常有用,因为它可以减少内存使用和数据库查询次数。 下面是一个简单的例子,假设我们有一个Book模型,并且想要将所有已发布的书的price字段增加10元: from django.db.models import F from myapp.models import Book # 将所有已发布的书的价格增加10元 Book.objects.filter(published=True).update(price=F('price') + 1

By Ne0inhk