深度学习——2_BP算法

BP算法=反向传播(求导)+梯度下降(优化参数求w)

 

 

# 反向传播
# 定义函数

def J(w):
    return((w*x) ** 2 + 1)** 2
x = 1
J(0)

# 函数求导
def J_prime(w):
    return x*(2*w*x)*2*((w*x)**2+1)

# 梯度下降法求得w,w=0时取得最小值
epoch = 10
lr = 0.1
w=1​
for i in range(epoch):
    w = w - lr*J_prime(w)
    print(w)
0.19999999999999996
0.11679999999999996
0.06944263454719998
0.04153163201131724
0.0248903244330708
0.014928026556183478
0.008955485273445873
0.00537300386953337
0.003223740276053923
0.0019342307645422627

 

 

def forward(x, w):
    y = w * x
    z = y ** 2    
    cost = (z + 1) ** 2
    cache = {'y': y, 'z': z}
    return cost, cache
cost, cache = forward(x, w)
cache​
def backward(x, w, cache):
    z = cache['z']
    y = cache['y']
    dz = 2 * (z+1)
    dy = dz * 2 * y
    dw = dy * x
    grads = {'dw': dw}
    return grads
backward(x, w, cache)

Out[]:{'dw': 8}

 

import numpy as np
data = 1 + 0.1*np.random.randn(10)

x = 1
w = 1
epoch = 10
lr = 0.1

for i in range(epoch):
    for x in data:
        # 计算导数
        cost, caches = forward(x, w)
        grads = backward(x, w, caches)

        # 梯度下降
        w = w - lr * grads['dw']
    
    print(w, cost)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值