1、加载必要的库,生成数据集


import math
import random
import matplotlib.pyplot as plt
import numpy as np
class moon_data_class(object):def __init__(self,N,d,r,w):self.N=Nself.w=wself.d=dself.r=rdef sgn(self,x):if(x>0):return 1;else:return -1;def sig(self,x):return 1.0/(1+np.exp(x))def dbmoon(self):N1 = 10*self.NN = self.Nr = self.rw2 = self.w/2d = self.ddone = Truedata = np.empty(0)while done:#generate Rectangular datatmp_x = 2*(r+w2)*(np.random.random([N1, 1])-0.5)tmp_y = (r+w2)*np.random.random([N1, 1])tmp = np.concatenate((tmp_x, tmp_y), axis=1)tmp_ds = np.sqrt(tmp_x*tmp_x + tmp_y*tmp_y)#generate double moon data ---upperidx = np.logical_and(tmp_ds > (r-w2), tmp_ds < (r+w2))idx = (idx.nonzero())[0]if data.shape[0] == 0:data = tmp.take(idx, axis=0)else:data = np.concatenate((data, tmp.take(idx, axis=0)), axis=0)if data.shape[0] >= N:done = False#print (data)db_moon = data[0:N, :]#print (db_moon)#generate double moon data ----downdata_t = np.empty([N, 2])data_t[:, 0] = data[0:N, 0] + rdata_t[:, 1] = -data[0:N, 1] - ddb_moon = np.concatenate((db_moon, data_t), axis=0)return db_moon

2、定义激活函数

def rand(a,b):return (b-a)* random.random()+adef sigmoid(x):#return np.tanh(-2.0*x)return 1.0/(1.0+math.exp(-x))
def sigmoid_derivate(x):#return -2.0*(1.0-np.tanh(-2.0*x)*np.tanh(-2.0*x))return x*(1-x) #sigmoid函数的导数
def make_matrix(m,n, fill = 0.0):mat=[]for i in range(m):mat.append([fill]*n)

3、定义神经网络

class BP_NET(object):def __init__(self):self.input_n = 0self.hidden_n = 0self.output_n = 0self.input_cells = []self.bias_input_n = []self.bias_output = []self.hidden_cells = []self.output_cells = []self.input_weights = []self.output_weights = []self.input_correction = []self.output_correction = []def setup(self, ni,nh,no):self.input_n = ni+1#输入层+偏置项self.hidden_n = nhself.output_n = noself.input_cells = [1.0]*self.input_nself.hidden_cells = [1.0]*self.hidden_nself.output_cells = [1.0]*self.output_nself.input_weights = make_matrix(self.input_n,self.hidden_n)self.output_weights = make_matrix(self.hidden_n,self.output_n)for i in range(self.input_n):for h in range(self.hidden_n):self.input_weights[i][h] = rand(-0.2,0.2)for h in range(self.hidden_n):for o in range(self.output_n):self.output_weights[h][o] = rand(-2.0,2.0)self.input_correction = make_matrix(self.input_n , self.hidden_n)self.output_correction = make_matrix(self.hidden_n,self.output_n)def predict(self,inputs):for i in range(self.input_n-1):self.input_cells[i] = inputs[i]for j in range(self.hidden_n):total = 0.0for i in range(self.input_n):total += self.input_cells[i] * self.input_weights[i][j]self.hidden_cells[j] = sigmoid(total)for k in range(self.output_n):total = 0.0for j in range(self.hidden_n):total+= self.hidden_cells[j]*self.output_weights[j][k]# + self.bias_output[k]self.output_cells[k] = sigmoid(total)return self.output_cells[:]def back_propagate(self, case,label,learn,correct):#计算得到输出output_cellsself.predict(case)output_deltas = [0.0]*self.output_nerror = 0.0#计算误差 = 期望输出-实际输出for o in range(self.output_n):error = label[o] - self.output_cells[o] #正确结果和预测结果的误差:0,1,-1output_deltas[o]= sigmoid_derivate(self.output_cells[o])*error#误差稳定在0~1内hidden_deltas = [0.0] * self.hidden_nfor j in range(self.hidden_n):error = 0.0for k in range(self.output_n):error+= output_deltas[k]*self.output_weights[j][k]hidden_deltas[j] = sigmoid_derivate(self.hidden_cells[j])*error for h in range(self.hidden_n):for o in range(self.output_n):change = output_deltas[o]*self.hidden_cells[h]#调整权重:上一层每个节点的权重学习*变化+矫正率self.output_weights[h][o] += learn*change #更新输入->隐藏层的权重for i in range(self.input_n):for h in range(self.hidden_n):change = hidden_deltas[h]*self.input_cells[i]self.input_weights[i][h] += learn*change error = 0for o in range(len(label)):for k in range(self.output_n):error+= 0.5*(label[o] - self.output_cells[k])**2return errordef train(self,cases,labels, limit, learn,correct=0.1):for i in range(limit):                error  = 0.0# learn = le.arn_speed_start /float(i+1)        for j in range(len(cases)):case = cases[j]label = labels[j]  error+= self.back_propagate(case, label, learn,correct)if((i+1)%500==0):print("error:",error)def test(self): #学习异或N = 200d = -4r = 10width = 6data_source = moon_data_class(N, d, r, width)data = data_source.dbmoon()# x0 = [1 for x in range(1,401)]input_cells = np.array([np.reshape(data[0:2*N, 0], len(data)), np.reshape(data[0:2*N, 1], len(data))]).transpose()labels_pre = [[1.0] for y in range(1, 201)]labels_pos = [[0.0] for y in range(1, 201)]labels=labels_pre+labels_posself.setup(2,5,1) #初始化神经网络:输入层,隐藏层,输出层元素个数self.train(input_cells,labels,2000,0.05,0.1) #可以更改test_x = []test_y = []test_p = []y_p_old = 0for x in np.arange(-15.,25.,0.1):for y in np.arange(-10.,10.,0.1):y_p =self.predict(np.array([x, y]))if(y_p_old <0.5 and y_p[0] > 0.5):test_x.append(x)test_y.append(y)test_p.append([y_p_old,y_p[0]])y_p_old = y_p[0]#画决策边界plt.plot( test_x, test_y, 'g--')    plt.plot(data[0:N, 0], data[0:N, 1], 'r*', data[N:2*N, 0], data[N:2*N, 1], 'b*')plt.show()   if __name__ == '__main__':nn = BP_NET()nn.test()

4、运行结果

Python实现多层感知器MLP(基于双月数据集)相关推荐

  1. 深度学习(一)多层感知器MLP/人工神经网络ANN

    目录 一.定义和公式 1. 多层感知器 Multi Layer Perceptron MLP 2. MLP实现非线性分类 3. Keras介绍 二. 代码实战 1. 建立MLP模型实现二分类 1.1  ...

  2. 用Python实现多层感知器神经网络

    作者|Vivek Patel 编译|Flin 来源|towardsdatascience 除非你能学习到一些东西,否则不要重复造轮子. 强大的库已经存在了,如:TensorFlow,PyTorch,K ...

  3. Python实现多层感知器网络

    资源下载地址:https://download.csdn.net/download/sheziqiong/85657028 神经网络-大作业1:实现多层感知器网络 网络设计 网络结构为单隐层神经网络. ...

  4. 多层感知器(MLP)

    多层感知器 多层感知器(Multilayer Perceptron,缩写MLP)是一种前向结构的人工神经网络,映射一组输入向量到一组输出向量.MLP可以被看作是一个有向图,由多个的节点层所组成,每一层 ...

  5. TFboy养成记 多层感知器 MLP

    内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声 ...

  6. 【监督学习】多层感知器MLP(含代码实现)

  7. 多层感知器(Muti-Layer Perception ,MLP)

    理解神经网络主要包括两大内容,一是神经网络的结构,其次则是神经网络的训练和学习,其就好比我们的大脑结构是怎么构成的,而基于该组成我们又是怎样去学习和识别不同事物的. 最典型的MLP包括包括三层:输入层 ...

  8. 神经网络入门回顾(感知器、多层感知器)

    神经网络属于"联结主义",和统计机器学习的理论基础区别还是很不一样. 以我自己的理解,统计机器学习的理论基于统计学,理论厚度足够强,让人有足够的安全感:而神经网络的理论更侧重于代数 ...

  9. TensorFlow 多层感知器

    本文主要介绍使用TensorFlow对多层感知器(MLP)进行编程,其他内容参考:TensorFlow 学习目录. 目录 一.多层感知器MLP 一.多层感知器MLP 多层感知器不同于CNN,CNN提取 ...

最新文章

  1. 2022-2028年中国GPS导航行业投资分析及前景预测报告
  2. java测试类 main方法_Java使用agent实现main方法之前的实例详解
  3. 完成这个例子,说出java中针对异常的处理机制。
  4. Go-err is shadowed during return
  5. struts2标签循环输出tr和td
  6. OpenCV使用Laplace运算符检测边缘的实例(附完整代码)
  7. Eclipse快捷键壁纸-0基础必备
  8. Leetcode每日一题:976.largest-perimeter-triangle(三角形的最大周长)
  9. 【基础】弹出框的处理(五)
  10. inux快速修改文件夹及文件下所有文件与文件夹权限
  11. JSP程序设计之(1)Tomcat安装及环境变量配置
  12. 局域网DNS服务器搭建
  13. python第三方库scapy中的sniff函数里的iface参数如何设置?
  14. 《UniBench A Benchmark for Multi-Model Database Management Systems》阅读笔记
  15. mxgraph 画布
  16. 做个jmeter登陆百度网盘的实例
  17. C++培训_001_WIN10的安装与激活_VS编译器的安装
  18. 微前端在小米 CRM 系统的实践
  19. 解决vue在IE11读取缓存的问题
  20. CLOUD云计算进阶(三)-云平台部署与管理

热门文章

  1. 线性神经网络原理以及MATLAB算法实现权值拟合和可线性分类
  2. 使用matlab求高阶累积量
  3. android手机两年变卡,安卓手机用一两年就卡是通病,知道这几招,还可以用很久...
  4. 2022-2028年全球与中国智能咖啡机行业市场前瞻与投资战略规划分析
  5. java 抓取搜狗微信_搜狗微信公众号文章抓取
  6. ipad打开网页无法播放视频
  7. DRM DUMB相关说明
  8. 360安全卫士防黑加固关闭了Telnet远程连接服务,如何开启?
  9. 浅谈天涯社区“工薪一族”爬虫
  10. 区块链是什么,如何简单易懂地介绍区块链