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中enumerate函数代码解析
Oct 31 Python
python与caffe改变通道顺序的方法
Aug 04 Python
使用python进行拆分大文件的方法
Dec 10 Python
如何用python写一个简单的词法分析器
Dec 18 Python
简单了解Django ContentType内置组件
Jul 23 Python
Django实现跨域请求过程详解
Jul 25 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
python使用Geany编辑器配置方法
Feb 21 Python
解决python对齐错误的方法
Jul 16 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
浅析PHP绘图技术
2013/07/03 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
js自动下载文件到本地的实现代码
2013/04/28 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
竞选劳动委员演讲稿
2014/04/28 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python