Python实现感知器模型、两层神经网络


Posted in Python onDecember 19, 2017

本文实例为大家分享了Python实现感知器模型、两层神经网络,供大家参考,具体内容如下

python 3.4 因为使用了 numpy

这里我们首先实现一个感知器模型来实现下面的对应关系

[[0,0,1], ——- 0
[0,1,1], ——- 1
[1,0,1], ——- 0
[1,1,1]] ——- 1

从上面的数据可以看出:输入是三通道,输出是单通道。

Python实现感知器模型、两层神经网络

这里的激活函数我们使用 sigmoid 函数 f(x)=1/(1+exp(-x))

其导数推导如下所示:

Python实现感知器模型、两层神经网络

L0=W*X;
z=f(L0);
error=y-z;
delta =error * f'(L0) * X;
W=W+delta;

python 代码如下:

import numpy as np

#sigmoid function

def nonlin(x, deriv = False):
  if(deriv==True):
    return x*(1-x)
  return 1/(1+np.exp(-x))


# input dataset

X=np.array([[0,0,1],
      [0,1,1],
      [1,0,1],
      [1,1,1]])

# output dataset

y=np.array([[0,1,0,1]]).T

#seed( ) 用于指定随机数生成时所用算法开始的整数值,
#如果使用相同的seed( )值,则每次生成的随即数都相同,
#如果不设置这个值,则系统根据时间来自己选择这个值,
#此时每次生成的随机数因时间差异而不同。
np.random.seed(1)  

# init weight value with mean 0

syn0 = 2*np.random.random((3,1))-1   

for iter in range(1000):
  # forward propagation
  L0=X
  L1=nonlin(np.dot(L0,syn0))

  # error
  L1_error=y-L1

  L1_delta = L1_error*nonlin(L1,True)

  # updata weight
  syn0+=np.dot(L0.T,L1_delta)

print("Output After Training:")
print(L1)

从输出结果可以看出基本实现了对应关系。

下面再用两层网络来实现上面的任务,这里加了一个隐层,隐层包含4个神经元。

import numpy as np

def nonlin(x, deriv = False):
  if(deriv == True):
    return x*(1-x)
  else:
    return 1/(1+np.exp(-x))

#input dataset
X = np.array([[0,0,1],
       [0,1,1],
       [1,0,1],
       [1,1,1]])

#output dataset
y = np.array([[0,1,1,0]]).T

#the first-hidden layer weight value
syn0 = 2*np.random.random((3,4)) - 1 

#the hidden-output layer weight value
syn1 = 2*np.random.random((4,1)) - 1 

for j in range(60000):
  l0 = X      
  #the first layer,and the input layer 
  l1 = nonlin(np.dot(l0,syn0)) 
  #the second layer,and the hidden layer
  l2 = nonlin(np.dot(l1,syn1)) 
  #the third layer,and the output layer


  l2_error = y-l2    
  #the hidden-output layer error

  if(j%10000) == 0:
    print "Error:"+str(np.mean(l2_error))

  l2_delta = l2_error*nonlin(l2,deriv = True)

  l1_error = l2_delta.dot(syn1.T)   
  #the first-hidden layer error

  l1_delta = l1_error*nonlin(l1,deriv = True)

  syn1 += l1.T.dot(l2_delta)
  syn0 += l0.T.dot(l1_delta)

print "outout after Training:"
print l2

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

Python 相关文章推荐
python获取豆瓣电影简介代码分享
Jan 16 Python
python 系统调用的实例详解
Jul 11 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
python如何制作缩略图
Apr 30 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
python支付宝支付示例详解
Aug 22 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
python实现感知器
Dec 19 #Python
python绘制简单折线图代码示例
Dec 19 #Python
matplotlib设置legend图例代码示例
Dec 19 #Python
matplotlib中legend位置调整解析
Dec 19 #Python
python实现感知器算法详解
Dec 19 #Python
python绘制条形图方法代码详解
Dec 19 #Python
Python实现两款计算器功能示例
Dec 19 #Python
You might like
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
JavaScript学习历程和心得小结
2010/08/16 Javascript
关于js类的定义
2011/06/28 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python目录和文件处理总结详解
2019/09/02 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
珍爱生命演讲稿
2014/05/10 职场文书
文明班级建设方案
2014/05/15 职场文书
办理房产证委托书
2014/09/18 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
三好学生竞选稿
2015/11/21 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python