与非门的图片如下

示意图

详细解释:

1 定义变量的代码,包括了输入、权值、输出等。其中激活函数采用的是sigmod函数

 # -*- coding: utf-8 -*-
__author__ = 'Administrator' import theano
import theano.tensor as T
import random
import numpy as np
from itertools import izip #定义网络结构
#定义输入
x=T.vector()
#定义权值W1
w1=theano.shared(np.random.randn(2)) #生成一个1行2列的随机数
w2=theano.shared(np.random.randn(2))
b1=theano.shared(np.random.randn(1))
b2=theano.shared(np.random.randn(1))
z1=T.dot(w1,x)+b1
a1=1/(1+T.exp(-z1))
z2=T.dot(w2,x)+b2
a2=1/(1+T.exp(-z2)) w=theano.shared(np.random.randn(2))
b=theano.shared(np.random.randn(1))
z=T.dot(w,[a1,a2])+b
y=1/(1+T.exp(-z))

2 定义目标输出和损失函数计算方式,我们采用的平方损失

 y_hat = T.scalar()#正确输出
cost = T.sum((y-y_hat)**2) #采用的是平方损失函数

另外也可以采用交叉熵损失函数

cost = - (y_hat*T.log(y)+(1-y_hat)*T.log(1-y)).sum() #采用交叉熵损失函数

3 误差反向传播求导,直接调用theano函数求解,方便快捷

 #误差反向传播求导
dw,db,dw1,dw2,db1,db2= T.grad(cost,[w,b,w1,w2,b1,b2])

4 权值更新

 #手动定义一个权值更新函数
def MyUpdate(paramters,gradients):
mu=0.1 #步长
paramters_updates= \
[(p, p-mu*g) for p,g in izip(paramters,gradients)]
return paramters_updates #绑定输入、输出与权值更新函数
g = theano.function(
inputs=[x,y_hat],
outputs=[y,cost],
updates=MyUpdate([w,b,w1,w2,b1,b2],[dw,db,dw1,dw2,db1,db2])
)

5 开始训练

 for i in range(50000):
y1,c1=g([0,0],0)
y2,c2=g([0,1],1)
y3,c3=g([1,0],1)
y4,c4=g([1,1],0)
print c1+c2+c3+c4
print y1,y2,y3,y4

6 结果输出:

0.000541548001074
[ 0.01069522] [ 0.98782012] [ 0.98784247] [ 0.01144574]
0.000541536246431
[ 0.01069511] [ 0.98782025] [ 0.9878426] [ 0.01144562]

可以看到,每一项都接近[0 1 1 0],网络已经成功训练了。

交叉熵的结果输出

0.00187006124627
[ 0.00044582] [ 0.99958399] [ 0.99938235] [ 0.00039013]

相同参数下,很明显交叉熵的结果更好!

Theano入门神经网络(二) 实现一个XOR门的更多相关文章

  1. Theano入门神经网络(一)

    Theano是一个Python库,专门用于定义.优化.求值数学表达式,效率高,适用于多维数组.特别适合做机器学习.一般来说,使用时需要安装python和numpy. 首先回顾一下机器学习的东西,定义一 ...

  2. Theano入门神经网络(三)

    附录一个:Keras学习随笔 http://blog.csdn.net/niuwei22007/article/details/49045909 参考 <Python Machine Learn ...

  3. Theano入门神经网络(四)

    这一部分主要介绍用Theano 实现softmax函数. 在多分类任务中经常用到softmax函数,首先上几个投影片解释一下 假设目标输出是y_hat ,激活函数后的Relu y 一个是1.2 一个是 ...

  4. GitHub入门之二 参与一个项目编写

    接上文:大多数时候我们也需要把别人的代码进行整合和修改,而不是简单的修改,这时就需要对一个项目进行修改. 注意,本系列文章主要说明在github网站上的操作,更多高级操作请使用git控制台 一.for ...

  5. 几个NAND/NOR门可以表示一个XOR门?

    这段时间就是在看测试相关的东西,无意之中发现了ISCAS85中有个名词EXOR,愣了一下反应过来应该还是异或门,毕竟叫exclusive-OR gate,其中文档中还提到了一句一个异或门可以由四个与非 ...

  6. 无废话MVC入门教程二[第一个小Demo]

    mvc技术交流,欢迎加群: 本文目标 1.了解"模型"."视图"."控制器"的创建.调试和使用过程. 本文目录 1.创建模型 2.创建视图 ...

  7. MVC入门教程二[第一个小Demo](转载)

    本文目标 1.了解"模型"."视图"."控制器"的创建.调试和使用过程. 本文目录 1.创建模型 2.创建视图 3.创建控制器 4.调试 5 ...

  8. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

    Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...

  9. 网络流量预测入门(二)之LSTM介绍

    目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...

随机推荐

  1. Mac中使用port升级gcc版本

    Mac OS中的gcc版本可能不会满足实际使用要求,需要对其升级. 这里介绍使用port方式来升级gcc版本.Macports是Mac OS中的软件包管理工具. 首先,安装Macports 这里提供O ...

  2. 【Win10 UWP】URI Scheme(二):自定义协议的处理和适用场景

    上一篇提到Windows Store协议的使用,其实Windows Store协议仅是系统内建的一种协议规则.我们也可以自己定义一套规范的URI-Scheme,除了可以给其他App调用外,本应用也可以 ...

  3. SqlServer2012 数据库的同步之SQL JOB + 建立链接服务器

         文章参考百度过的文章,现在忘了具体哪篇,感谢其分享,这里根据自己的操作和遇到的问题整理一下.      需求:在两个不同的SQL SERVER 2012的服务器之间进行数据访问和更新.我们需 ...

  4. 将SQL SERVER数据库改成MySql

    (www.helpqy.com) 架构在阿里云上,最先想采用SQL SERVER,想大家都是微软家族的嘛.但是发现SQL SERVER需要的配置比较高,需要的银子也比较多,最后在纠结之下换成了MySq ...

  5. 【Python】调用WPS V9 API,实现Word转PDF

    WPS 的API,即COM,主要分为V8与V9两个版本,网上容易查到的例子,都是V8的. 现在官网上可以下载的,2013抢鲜版,就是V9的API. Python 调用COM 需要安装 Python f ...

  6. session机制详解以及session的相关应用

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...

  7. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...

  8. [Unity3D]做个小Demo学习Input.touches

    [Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https ...

  9. common-dbcp2数据库连接池参数说明

    参数 默认值 描述 建议值 DefaultAutoCommit  null 通过这个池创建连接的默认自动提交状态.如果不设置,则setAutoCommit 方法将不被调用.  true Default ...

  10. Java-集合练习5

    第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得 ...