话说神经网络

话说神经网络

此篇文章仿照大话神经网络,10行代码不调包,听不懂你打我来编写,写作目的只是记录学习过程,想看详细讲解请访问上面网址。
我们用一个例子来讲解简单的神经网络
我们来举一个去不去看电影的例子:

如花小倩小明小强
0010
1111
1011
0110
110

0代表不去,1代表去
我们先观察一下这组数据的规律:只要如花去,小强就去,那么我们可以用一个公式来代替上面这个例子:AxW1+BxW2+CxW3=?,如图所示。机器学习就是我们不断试错不断改正,直到找到正确的结果的过程。
在这里插入图片描述
过程主要有以下几步:

  1. 初始化权重
  2. 按照权重计算结果
  3. 计算误差
  4. 根据误差调整权重
  5. 重复以上步骤10000次

过程有了,那么接下来我们开始写代码!

#引入库
from numpy import random,dot,exp,array
#初始化,将数据放到X里
X=array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
#结果放到y里,T是转置的意思
y = array([[0,1,1,0]]).T
#1.设置随机权重
#引用一个随机种子
random.seed(3)
#首先生成3行1列的数范围在0-1之间,然后乘以2,再减一,就将数值控制再-1-1之间
weight =2*random.random((3,1))-1


# 循环
def fp(input):
    l1_output = 1 / (1 + exp(-dot(input, w0)))
    l2_output = 1 / (1 + exp(-dot(l1_output, w1)))
    return l1_output,l2_output
def bp(l1,l2,y):
    l1_error = y - l2
    # 计算斜率
    l1_slope = l2 * (1 - l2)
    # 计算增量
    l1_delta = l1_error * l1_slope

    l0_slope =l1*(1-l1)
    l0_error = l1_delta.dot(w1.T)
    l0_dalta = l0_slope*l0_error
    return l1_delta,l0_dalta
if __name__ == '__main__':
    for it in range(10000):
        # 两个矩阵相乘
        l0=X
        l1,l2 =fp(l0)
        l1_delta,l0_dalta= bp(l1,l2,y)
        #更新权重
        w0 = w0+dot(l0.T,l0_dalta)
        w1 =w1+dot(l1.T,l1_delta)
    print(fp([[0,1,1]]))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值