有监督的反向传播神经网络模型,三层网络,多输入单输出,python实现

以红绿灯为例:(用python实现)

输入集:

[[1,0,1], [0,1,1], [0,0,1],[1,1,1]]

给定输出集:[0,1,0,1]

设定的隐藏层的节点为4个,可以自由更改,alpha为0.2

import numpy as np
streetlightings = np.array([[1,0,1],
                            [0,1,1],
                            [0,0,1],
                            [1,1,1]])

walk_stop = np.array([[0,1,0,1]]).T   #做转置是为了为后面的计算方便
alpha = 0.2
hidden_size=4 #隐藏层节点数

 

这幅图像就是本模型的形象表现

def relu(x):
    return (x > 0) * x # returns x if x > 0
                       # return 0 otherwise

def relu2deriv(output):
    return output>0 # returns 1 for input > 0
                    # return 0 otherwise

for i in range(150):
    layer_2_error = 0
    print('第',i,'步')
    for a in range(len(streetlightings)):
        layer_0 = streetlightings[a:a+1]   #输入
        layer_1 = relu(np.dot(layer_0,weights0_1))  #隐藏层=输入*权重,并且将权重小于0的置为0
        layer_2 = np.dot(layer_1,weights1_2)   #输出=隐藏层*权重
        layer_2_error += np.sum((layer_2 - walk_stop[a:a+1])**2)   
        layer_2_delta = (walk_stop[a:a+1]-layer_2)     #layer2层的delta=真实值-预测值
        layer_1_delta = layer_2_delta.dot(weights1_2.T)*relu2(layer_1)    #layer1层的delta=layer_2_delta*weights1_2
        weights1_2 += alpha*layer_1.T.dot(layer_2_delta)  #第二层权重更新规则:+=alpha*第二层输入(隐藏层结果)*第二层delta
        weights0_1 += alpha*layer_0.T.dot(layer_1_delta)   #第一层权重更新规则: +=alpha*第一层输入*第一层delta
    print("error:",layer_2_error)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值