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 psutil模块简单使用实例
Apr 28 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python实现微信自动回复机器人功能
Jul 11 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Python 读取位于包中的数据文件
Aug 07 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 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面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
详解react如何在组件中获取路由参数
2017/06/15 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
TensorFlow损失函数专题详解
2018/04/26 Python
wxpython布局的实现方法
2019/11/01 Python
python3 使用traceback定位异常实例
2020/03/09 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
为什么使用接口?
2014/08/13 面试题
调解员先进事迹材料
2014/02/07 职场文书
先进党组织事迹材料
2014/12/26 职场文书
监察建议书
2015/02/04 职场文书
红旗渠导游词
2015/02/09 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
2016中秋节广告语
2016/01/28 职场文书
《确定位置》教学反思
2016/02/18 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL