人工智能实战2019_第二次作业_蔺立萱

||||
|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|项目|内容
|课程链接| 人工智能实战 2019(北京航空航天大学)
|第二次作业要求|第二次作业 - 双变量的反向传播
|我的课程目标|熟练掌握python语言,神经网络相关应用,实操项目
|本次作业的帮助|根据编程双变量的反向传播掌握神经网络的基础知识
|我的github账户|linlixuan

1、题目

  • x=2w+3b
  • y=2b+1
  • z = x*y
  • 完成双变量的反向传播代码并给出相应的结果和误差

2、双变量的方向传播代码

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 18 11:52:59 2019

@author: Jam
"""

import numpy as np

w = 3
b = 4
z = 162
target = 150
eps = 1e-5
cnt = 0

def double_parameters(b,w):
   x = 3*b + 2*w
   y = 2*b + 1
   z = x*y
   delta_b_0 = (3*y + 2*x)
   delta_w_0 = (2*y)
   return(x,y,z,delta_b_0,delta_w_0)

while (np.abs(z-target)>eps):
    cnt+=1
    x,y,z,delta_b_0,delta_w_0 = double_parameters(b,w)
    print("cnt=%d, w=%f, b=%f, z=%f" %(cnt, w, b, z))
    error = z - target
    delta_b = error/(2*delta_b_0)
    delta_w = error/(2*delta_w_0)
    b = b - delta_b
    w = w - delta_w
    print("error=%.9f, delta_b=%f, delta_w=%f,e" %(error, delta_b, delta_w));

print('\n')    
print('FINAL_cnt=%d,b=%f, w=%f,error=%.9f' %(cnt, b, w, error))

3、运行结果

cnt=1, w=3.000000, b=4.000000, z=162.000000
error=12.000000000, delta_b=0.095238, delta_w=0.333333
cnt=2, w=2.666667, b=3.904762, z=150.181406
error=0.181405896, delta_b=0.001499, delta_w=0.005148
cnt=3, w=2.661519, b=3.903263, z=150.000044
error=0.000044335, delta_b=0.000000, delta_w=0.000001
cnt=4, w=2.661517, b=3.903263, z=150.000000
error=0.000000000, delta_b=0.000000, delta_w=0.000000

FINAL_cnt=4,b=3.903263, w=2.661517,error=0.000000000

4、思考与比较

  • 实时的反馈和迭代能够更快的达到所期望的目标值
  • 对半的将误差平分在变量头上是一种较为鲁莽的做法,每个变量参与不同的权重,以此不断更新权重效率才会更高

posted on 2019-03-18 15:41  linlixuan00  阅读(120)  评论(0编辑  收藏  举报

导航