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 Django模板的使用方法(图文)
Nov 04 Python
Python全局变量用法实例分析
Jul 19 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
python计算两个数的百分比方法
Jun 29 Python
selenium+python自动化测试之环境搭建
Jan 23 Python
python实现简单日期工具类
Apr 24 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
什么是python的必选参数
Jun 21 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
python中random模块详解
Mar 01 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
判断用户是否在线的代码
2011/03/05 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
JavaScript 自定义事件之我见
2017/09/25 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python 数据加密代码
2008/12/24 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
浅谈Python中的私有变量
2018/02/28 Python
python requests post多层字典的方法
2018/12/27 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
利用python进行文件操作
2020/12/04 Python
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
ASP.NET中的身份验证有那些
2012/07/13 面试题
AJAX的全称是什么
2012/11/06 面试题
外贸公司实习自我鉴定
2013/09/24 职场文书
移动通信专业自荐信范文
2013/11/12 职场文书
市三好学生主要事迹
2014/01/28 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
大学毕业生个人总结
2015/02/28 职场文书
大专护理专业自荐信
2015/03/25 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
生死抉择观后感
2015/06/09 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书