python实现多层感知器


Posted in Python onJanuary 18, 2019

写了个多层感知器,用bp梯度下降更新,拟合正弦曲线,效果凑合。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
 
 
def sigmod(z):
 return 1.0 / (1.0 + np.exp(-z))
 
 
class mlp(object):
 def __init__(self, lr=0.1, lda=0.0, te=1e-5, epoch=100, size=None):
  self.learningRate = lr
  self.lambda_ = lda
  self.thresholdError = te
  self.maxEpoch = epoch
  self.size = size
  self.W = []
  self.b = []
  self.init()
 
 def init(self):
  for i in xrange(len(self.size)-1):
   self.W.append(np.mat(np.random.uniform(-0.5, 0.5, size=(self.size[i+1], self.size[i]))))
   self.b.append(np.mat(np.random.uniform(-0.5, 0.5, size=(self.size[i+1], 1))))
 
 def forwardPropagation(self, item=None):
  a = [item]
  for wIndex in xrange(len(self.W)):
   a.append(sigmod(self.W[wIndex]*a[-1]+self.b[wIndex]))
  """
  print "-----------------------------------------"
  for i in a:
   print i.shape,
  print
  for i in self.W:
   print i.shape,
  print
  for i in self.b:
   print i.shape,
  print
  print "-----------------------------------------"
  """
  return a
 
 def backPropagation(self, label=None, a=None):
  # print "backPropagation--------------------begin"
  delta = [(a[-1]-label)*a[-1]*(1.0-a[-1])]
  for i in xrange(len(self.W)-1):
   abc = np.multiply(a[-2-i], 1-a[-2-i])
   cba = np.multiply(self.W[-1-i].T*delta[-1], abc)
   delta.append(cba)
  """
  print "++++++++++++++delta++++++++++++++++++++"
  print "len(delta):", len(delta)
  for ii in delta:
   print ii.shape,
  print "\n======================================="
  """
  for j in xrange(len(delta)):
   ads = delta[j]*a[-2-j].T
   # print self.W[-1-j].shape, ads.shape, self.b[-1-j].shape, delta[j].shape
   self.W[-1-j] = self.W[-1-j]-self.learningRate*(ads+self.lambda_*self.W[-1-j])
   self.b[-1-j] = self.b[-1-j]-self.learningRate*delta[j]
   """print "=======================================1234"
   for ij in self.b:
    print ij.shape,
   print
   """
  # print "backPropagation--------------------finish"
  error = 0.5*(a[-1]-label)**2
  return error
 
 def train(self, input_=None, target=None, show=10):
  for ep in xrange(self.maxEpoch):
   error = []
   for itemIndex in xrange(input_.shape[1]):
    a = self.forwardPropagation(input_[:, itemIndex])
    e = self.backPropagation(target[:, itemIndex], a)
    error.append(e[0, 0])
   tt = sum(error)/len(error)
   if tt < self.thresholdError:
    print "Finish {0}: ".format(ep), tt
    return
   elif ep % show == 0:
    print "epoch {0}: ".format(ep), tt
 
 def sim(self, inp=None):
  return self.forwardPropagation(item=inp)[-1]
 
 
if __name__ == "__main__":
 tt = np.arange(0, 6.28, 0.01)
 labels = np.zeros_like(tt)
 print tt.shape
 """
 for po in xrange(tt.shape[0]):
  if tt[po] < 4:
   labels[po] = 0.0
  elif 8 > tt[po] >= 4:
   labels[po] = 0.25
  elif 12 > tt[po] >= 8:
   labels[po] = 0.5
  elif 16 > tt[po] >= 12:
   labels[po] = 0.75
  else:
   labels[po] = 1.0
 """
 tt = np.mat(tt)
 labels = np.sin(tt)*0.5+0.5
 labels = np.mat(labels)
 model = mlp(lr=0.2, lda=0.0, te=1e-5, epoch=500, size=[1, 6, 6, 6, 1])
 print tt.shape, labels.shape
 print len(model.W), len(model.b)
 print
 model.train(input_=tt, target=labels, show=10)
 sims = [model.sim(tt[:, idx])[0, 0] for idx in xrange(tt.shape[1])]
 
 xx = tt.tolist()[0]
 plt.figure()
 plt.plot(xx, labels.tolist()[0], xx, sims, 'r')
 plt.show()

效果图:

python实现多层感知器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理json数据中的中文
Mar 06 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
如何使用Python 打印各种三角形
Jun 28 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
深入了解Python在HDA中的应用
Sep 05 Python
学习Django知识点分享
Sep 11 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
Python底层封装实现方法详解
Jan 22 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
python 实现分组求和与分组累加求和代码
May 18 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 #Python
基于python实现KNN分类算法
Apr 23 #Python
python实现定时发送qq消息
Jan 18 #Python
如何在Django中设置定时任务的方法示例
Jan 18 #Python
Python设计模式之工厂方法模式实例详解
Jan 18 #Python
Python设计模式之原型模式实例详解
Jan 18 #Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 #Python
You might like
PHP 图像尺寸调整代码
2010/05/26 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
php制作文本式留言板
2015/03/18 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
js中this用法实例详解
2015/05/05 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
英语简历自我评价
2014/01/26 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
励志演讲稿300字
2014/08/21 职场文书
村干部任职承诺书
2015/01/21 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers