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 相关文章推荐
在Docker上开始部署Python应用的教程
Apr 17 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
Python下简易的单例模式详解
Apr 08 Python
对Django 转发和重定向的实例详解
Aug 06 Python
Python读取实时数据流示例
Dec 02 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
Python字符串的15个基本操作(小结)
Feb 03 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创建Cookie数组的详解
2013/07/03 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python自动登录126邮箱的方法
2015/07/10 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Python any()函数的使用方法
2019/10/28 Python
python全局变量引用与修改过程解析
2020/01/07 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
护士求职信范文
2014/05/24 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书