深度学习1感知机及实现简单反向传播网络

感知机是什么?
感知机接受多个输入信号,输出一个信号
感知机的信号只有“流/不流”两种取值,0对应“不传递信号”,1对应“传递信号”。
输入信号在被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号的总和,只有当这个总和超过某个界限值时,才会输出1。这也称为“神经元被激活”。
上述内容用数学式来表示,就是:
y=0(w1x1+w2x2<=θ)
1 (w1x1+w2x2>θ)
在这里插入图片描述
简单逻辑电路
与门 and gate:与门是具有两个输出和一个输入的门电路。 与门仅在两个输入均为1时输出1,其他时候输出0
与非门 NAND gate
或门

感知机的实现
与门的实现

def AND(x1,x2):
    w1,w2,theta = 0.5,0.5,0.7
    tmp = w1*x1+w2*x2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

导入权重和偏置
y=0(b+w1x1+w2x2<=0)
1(b+w1x1+w2x2>0)
偏置的值决定了神经元被激活的容易程度

感知机的局限性
异或门,仅当x1和x2中的一方为1时,才会输出1.
一条直线无法分开 真值表中的4个点

曲线分割的空间称为非线性空间,直线分割的空间称为线性空间。

多层感知机

异或门的实现
AND函数。NAND函数。OR函数。叠加

def XOR(x1, x2):
    s1= NAND(x1,x2)
    s2= OR(x1,x2)
    y=AND(s1,s2)
    return y

反向传播网络

#定义激活函数
import numpy as np
def sigmoid(x, deriv=Flase)
    if deriv==True:
        return x*(1-x)
    return 1/(1+np.exp(-x))
#网络结构
w0 = np.random.random(( , ))
w1 =  np.random.random(( , ))
#前向传播
l0 = x
l1 = sigmoid(np.dot(l0, w0))
l2 = sigmoid(np.dot(l1,w1))
l2_error = l2 - y
#反向传播
l2_delta = l2_error * sigmode(l2, deriv=True)
l1_error = np.dot(l2_delta, w1.T)
l1_delta = l1_error*sigmode(l1, deriv=True)
#更新参数
w1-=l1.T .dot( l2_delta)
w0-=l0.T .dot( l1_delta)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章