BP神经网络及异或实现
BP神经网络是最简单的神经网络模型了,三层能够模拟非线性函数效果。

难点:
- 如何确定初始化参数?
- 如何确定隐含层节点数量?
- 迭代多少次?如何更快收敛?
- 如何获得全局最优解?
'''
neural networks created on 2019.9.24
author: vince
'''
import math
import logging
import numpy
import random
import matplotlib.pyplot as plt '''
neural network
'''
class NeuralNetwork: def __init__(self, layer_nums, iter_num = 10000, batch_size = 1):
self.__ILI = 0;
self.__HLI = 1;
self.__OLI = 2;
self.__TLN = 3; if len(layer_nums) != self.__TLN:
raise Exception("layer_nums length must be 3"); self.__layer_nums = layer_nums; #array [layer0_num, layer1_num ...layerN_num]
self.__iter_num = iter_num;
self.__batch_size = batch_size; def train(self, X, Y):
X = numpy.array(X);
Y = numpy.array(Y); self.L = [];
#initialize parameters
self.__weight = [];
self.__bias = [];
self.__step_len = [];
for layer_index in range(1, self.__TLN):
self.__weight.append(numpy.random.rand(self.__layer_nums[layer_index - 1], self.__layer_nums[layer_index]) * 2 - 1.0);
self.__bias.append(numpy.random.rand(self.__layer_nums[layer_index]) * 2 - 1.0);
self.__step_len.append(0.3); logging.info("bias:%s" % (self.__bias));
logging.info("weight:%s" % (self.__weight)); for iter_index in range(self.__iter_num):
sample_index = random.randint(0, len(X) - 1);
logging.debug("-----round:%s, select sample %s-----" % (iter_index, sample_index));
output = self.forward_pass(X[sample_index]);
g = (-output[2] + Y[sample_index]) * self.activation_drive(output[2]);
logging.debug("g:%s" % (g));
for j in range(len(output[1])):
self.__weight[1][j] += self.__step_len[1] * g * output[1][j];
self.__bias[1] -= self.__step_len[1] * g; e = [];
for i in range(self.__layer_nums[self.__HLI]):
e.append(numpy.dot(g, self.__weight[1][i]) * self.activation_drive(output[1][i]));
e = numpy.array(e);
logging.debug("e:%s" % (e));
for j in range(len(output[0])):
self.__weight[0][j] += self.__step_len[0] * e * output[0][j];
self.__bias[0] -= self.__step_len[0] * e; l = 0;
for i in range(len(X)):
predictions = self.forward_pass(X[i])[2];
l += 0.5 * numpy.sum((predictions - Y[i]) ** 2);
l /= len(X);
self.L.append(l); logging.debug("bias:%s" % (self.__bias));
logging.debug("weight:%s" % (self.__weight));
logging.debug("loss:%s" % (l));
logging.info("bias:%s" % (self.__bias));
logging.info("weight:%s" % (self.__weight));
logging.info("L:%s" % (self.L)); def activation(self, z):
return (1.0 / (1.0 + numpy.exp(-z))); def activation_drive(self, y):
return y * (1.0 - y); def forward_pass(self, x):
data = numpy.copy(x);
result = [];
result.append(data);
for layer_index in range(self.__TLN - 1):
data = self.activation(numpy.dot(data, self.__weight[layer_index]) - self.__bias[layer_index]);
result.append(data);
return numpy.array(result); def predict(self, x):
return self.forward_pass(x)[self.__OLI]; def main():
logging.basicConfig(level = logging.INFO,
format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S'); logging.info("trainning begin.");
nn = NeuralNetwork([2, 2, 1]);
X = numpy.array([[0, 0], [1, 0], [1, 1], [0, 1]]);
Y = numpy.array([0, 1, 0, 1]);
nn.train(X, Y); logging.info("trainning end. predict begin.");
for x in X:
print(x, nn.predict(x)); plt.plot(nn.L)
plt.show(); if __name__ == "__main__":
main();
具体收敛效果
BP神经网络及异或实现的更多相关文章
- BP神经网络求解异或问题(Python实现)
反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播.这两个过程简述如下: 1.正向传播 输入的样本从输入层经过隐单元一层一层进行处理,传向输出层:在逐层处理的过程中.在输 ...
- BP神经网络原理及python实现
[废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...
- BP神经网络分类器的设计
1.BP神经网络训练过程论述 BP网络结构有3层:输入层.隐含层.输出层,如图1所示. 图1 三层BP网络结构 3层BP神经网络学习训练过程主要由4部分组成:输入模式顺传播(输入模式由输入层经隐含层向 ...
- 【转】漫谈ANN(2):BP神经网络
上一次我们讲了M-P模型,它实际上就是对单个神经元的一种建模,还不足以模拟人脑神经系统的功能.由这些人工神经元构建出来的网络,才能够具有学习.联想.记忆和模式识别的能力.BP网络就是一种简单的人工神经 ...
- 神经网络中的BP神经网络和贝叶斯
1 贝叶斯网络在地学中的应用 1 1.1基本原理及发展过程 1 1.2 具体的研究与应用 4 2 BP神经网络在地学中的应用 6 2.1BP神经网络简介 6 2.2基本原理 7 2.3 在地学中的具体 ...
- BP神经网络与Python实现
人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善. 联想大家熟悉的回归问题, 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数, 并使用该函数进行预测, 网 ...
- 机器学习入门学习笔记:(一)BP神经网络原理推导及程序实现
机器学习中,神经网络算法可以说是当下使用的最广泛的算法.神经网络的结构模仿自生物神经网络,生物神经网络中的每个神经元与其他神经元相连,当它“兴奋”时,想下一级相连的神经元发送化学物质,改变这些神经元的 ...
- 三层BP神经网络的python实现
这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏 ...
- 二、单层感知器和BP神经网络算法
一.单层感知器 1958年[仅仅60年前]美国心理学家FrankRosenblant剔除一种具有单层计算单元的神经网络,称为Perceptron,即感知器.感知器研究中首次提出了自组织.自学习的思想, ...
随机推荐
- Centos 7 中 部署 asp.net core 3.0 + nginx + mongodb 的一些新手简单入门,非docker
目录 零.准备工作 一.部署Mongodb 1.安装Mongodb 2.创建mongodb的数据目录 3.设置目录权限 4.设置mongodb启动 5.修改mongodb的配置文件 6.启动Mongo ...
- ubuntu16.04安装库、插件报错:
安装一些插件.库,遇到报错 Could not fetch URL https://pypi.org/simple/pytest-pycodestyle/: There was a problem c ...
- plsql乱码问题
1,问题:在plsql 中执行sql语句,查询结果带有中文,出现乱码,即" ??? ":如下: 2,解决: 1)输入sql语句 select * from V$NLS_PARAME ...
- VOIP RTP RTSP 实现 Baresip 源码分析
RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...
- Latex数学符号对应表
1. 希腊字母 字母 实现 字母 实现 $\alpha$ \alpha $\Alpha$ \Alpha $\beta$ \beta $\Beta$ \Beta $\gamma$ \gamma $\Ga ...
- python 异步MySQL存库
对于异步框架而言,这些延迟是无法接受的.因此, Twisted 提供了 twisted.enterprise.adbapi, 遵循DB-API 2.0协议的一个异步封装. adbapi 在单独的线程里 ...
- 【猫狗数据集】使用top1和top5准确率衡量模型
数据集下载地址: 链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw提取码:2xq4 创建数据集:https://www.cnblogs.com/xi ...
- Qt5小Demo之猜数字游戏
玩法:设定时间进行猜数字,所猜数字为一个四位数,输入自己的数字,系统会提示是大了还是小了,依据条件逐步逼近正确结果.在规定时间里猜对即获胜,否则即失败. 平台支持:Win10下测试正常. 源码地址: ...
- Altium Designer 20下载与安装教程
目录 一.Altium Designer 20下载 二.Altium Designer 20安装 三.Altium Designer 20破解 四.Altium Designer 20汉化 作者:st ...
- Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解
1.背景: 工作中是否有这样的场景?一个软件系统会同时有多个不同版本部署,比如我现在做的IM系统,同时又作为公司的技术输出给其他银行,不同的银行有自己的业务实现(比如登陆验证.用户信息查询等) ...