(22)Backward Propagation 代码实现

(22)Backward Propagation 代码实现

接下来我们将Backward Propagation的过程以代码的方式实现。

  • 首先,我们先写一个接口BackPropagation.py,BackPropagation.py的实现将和我

们刚才描述的Backward Propagation的过程是一样的。applyBackPragation方法的参数中instances是所有的输入数据, nodes是所有的节点, weights是权重, learning_rate是学习率。进行一次完整的训练以后将结果返回,返回的结果是所有的节点nodes,及更新的权重weights 。训练以后返回一个训练好的神经网络,这个是TensorFlow静态图的概念,PyTorch在训练以后也可以调整,这也是PyTorch最吸引人的地方。这里返回的是节点和权重,下次在输入数据的时候,把输入数据经过权重的处理,进入下一层的节点;然后把数据再经过权重的处理,再进入下一层的节点;再经过权重的处理,再进入下一层的节点;最后经过权重的处理,计算出结果。理想情况下,计算的结果和真实的结果是一样的。

Create_AI_Framework_In5Classes(Day3)版本的BackPropagation.py接口:

class BackPropagation:

2)我们在Neuron_Network_Entry.py中要应用BackPropagation.py,一般情况下要运行多少次Epoch,这里假设Epoch为1万次,对所有训练的数据集重复运行1万次;learning_rate是一个调优参数,在优化的时候使用,这里设置为0.1,暂时不用关注,因为有没有learning_rate,以及不同的learning_rate,不会对网络的收敛Converge,即达到梯度下降的极值产生影响。我们在Create_AI_Framework_In5Classes(Day2)版本的基础上对Neuron_Network_Entry.py进行修改。

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

# -*- coding: utf-8 -*-

Create_AI_Framework_In5Classes(Day3)版本的Neuron_Network_Entry.py,与

Create_AI_Framework_In5Classes(Day2)版本相比:

 上段代码中第4行之后新增代码,新增自研BackPropagation类的导入。

 上段代码中第22行之后新增代码,新增epoch、learning_rate变量的定义及调用BackPropagation.applyBackPragation方法。


…….

通过BackPropagation.applyBackPragation方法训练好以后,权重都达到了最佳的状态,然后对输入数据再应用一次applyForwardPropagation,将达到最佳的预测结果,这个预测结果肯定比没有做Back Propagation的结果精确的多。因为如果不是这样,表明梯度下降的算法有问题,而梯度下降的算法基本不会有问题,因为梯度下降的算法都是一些数学家大神几十年的研究成果,例如Sigmoid的梯度下降的求导,ReLU的梯度下降的求导,它们是不同时期的研究成果,这2者之间有很大的不同,由于应用场景不一样,Sigmoid在一些情况并不理想,而ReLU算法是非常理想的。因此,人工智能背后的理论出奇的复杂,背后的原理机制可能需数学专业的博士生、研究生或同等学力的研究人员进行研究。对于AI框架的应用而言,Python的一些框架已经将这些数学公式进行了封装,我们可以直接调用框架的接口进行调用。


Read more

Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势

Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势

摘要: 目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师、技术VP或者CTO在交流时,有些甚至还不知道该项目的存在。可能这也与国内阿里巴巴开源服务治理框架Dubbo有一定的关系,除了Dubbo本身较为完善的中文文档之外,不少科技公司的架构师均出自阿里系,所以就目前情况看,短期国内还是Dubbo的天下。Spring Cloud是一个相对比较新的微服务框架,今年(2016)推出1.0的release版本,目前Github上更新速度很快. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。spring cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用.它们将在任何分布式环境中工作,包括开发人员自己的笔记本电脑,裸物理机的数据中心,和像Cloud Foundry云管理

By Ne0inhk
SQLite学习总结(1)——SQLite简介及快速入门

SQLite学习总结(1)——SQLite简介及快速入门

SQLite 简介 本教程帮助您了解什么是 SQLite,它与 SQL 之间的不同,为什么需要它,以及它的应用程序数据库处理方式。 SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。 什么是 SQLite? SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 为什么要用 SQLite? * 不需要一个单独的服务器进程或操作的系统(无服务器的)。 * SQLite 不需要配置,这意味着不需要安装或管理。 * 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。 * SQLite

By Ne0inhk
SQLite学习总结(2)——使用Java操作SQLite

SQLite学习总结(2)——使用Java操作SQLite

SQLite - Java 安装 在 Java 程序中使用 SQLite 之前,我们需要确保机器上已经有 SQLite JDBC Driver 驱动程序和 Java。可以查看 Java 教程了解如何在计算机上安装 Java。现在,我们来看看如何在机器上安装 SQLite JDBC 驱动程序。 * 从  库下载 sqlite-jdbc-(VERSION).jar 的最新版本。 * 在您的 class 路径中添加下载的 jar 文件 sqlite-jdbc-(VERSION).jar,或者在 -classpath 选项中使用它,这将在后面的实例中进行讲解。 在学习下面部分的知识之前,您必须对 Java JDBC 概念有初步了解。如果您还未了解相关知识,那么建议您可以先花半个小时学习下 JDBC

By Ne0inhk
SQLite学习总结(3)——SQLite命令及语法

SQLite学习总结(3)——SQLite命令及语法

SQLite 命令 本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。 让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。 $ sqlite3 SQLite version 3.3.6Enter ".help" for instructions sqlite> 如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如: sqlite>.help 上面的命令会显示各种重要的 SQLite 点命令的列表,如下所示: 命令 描述 .backup ?DB? FILE

By Ne0inhk