즐거운프로그래밍

[딥러닝] 딥러닝 인공 신경망 구현하기 연습문제 1

수수께끼 고양이 2023. 10. 28. 21:08
728x90
반응형

 

연습문제 1. 2입력 3출력 인공신경망을 구현하고 학습하기

 

공식 정리

# 순전파
y1=x1*w1+x2*w2+1*b1
y2=x1*w3+x2*w4+1*b2
y3=x1*w5+x2*w6+1*b3

# 평균 제곱 오차
E=(y1-y1T)**2/2+(y2-y2T)**2/2+(y3-y3T)**2/2

# 역전파 오차
y1E=y1-y1T
y2E=y2-y2T
y3E=y3-y3T

# 입력 역전파
x1E=y1E*w1+y2E*w3+y3E*w5
x2E=y1E*w2+y2E*w4+y2E*w6

#가중치, 편향 순전파
y1=x1*w1+x2*w2+1*b1
y2=x1*w3+x2*w4+1*b2
y3=x1*w5+x2*w6+1*b3
y1=w1*x1+w2*x2+b1*1
y2=w3*x1+w4*x2+b2*1
y3=w5*x1+w6*x2+b3*1

# 가중치, 편향 역전파
w1E=y1E*x1
w2E=y1E*x2
b1E=y1E*1
w3E=y2E*x1
w4E=y2E*x2
b2E=y2E*1
w5E=y3E*x1
w6E=y3E*x2
b3E=y3E*1

# 신경망 학습
w1-=lr*w1E
w2-=lr*w2E
b1-=lr*b1E
w3-=lr*w3E
w4-=lr*w4E
b2-=lr*b2E
w5-=lr*w5E
w6-=lr*w6E
b3-=lr*b3E

 

 

인공학습망 구현하고 학습 (학습률 0.01)

x1,x2=0.05,0.10
w1,w2=0.15,0.20
w3,w4=0.25,0.30
w5,w6=0.40,0.55
b1,b2,b3=0.35,0.45,0.60
y1T,y2T,y3T=0.01,0.99,0.50
lr=0.01

for epoch in range(2000):
    y1=x1*w1+x2*w2+1*b1
    y2=x1*w3+x2*w4+1*b2
    y3=x1*w5+x2*w6+1*b3
    
    E=(y1-y1T)**2/2+(y2-y2T)**2/2+(y3-y3T)**2/2
    
    y1E=y1-y1T
    y2E=y2-y2T
    y3E=y3-y3T
    
    w1E=y1E*x1
    w2E=y1E*x2
    b1E=y1E*1
    
    w3E=y2E*x1
    w4E=y2E*x2
    b2E=y2E*1
    
    w5E=y3E*x1
    w6E=y3E*x2
    b3E=y3E*1
    
    w1=w1-lr*w1E
    w2=w2-lr*w2E
    b1=b1-lr*b1E
    
    w3=w3-lr*w3E
    w4=w4-lr*w4E
    b2=b2-lr*b2E
    
    w5=w5-lr*w5E
    w6=w6-lr*w6E
    b3=b3-lr*b3E
    
    print(f'epoch={epoch}')
    print(f'y1:{y1:.3f}')
    print(f'y2:{y2:.3f}')
    print(f'y3:{y3:.3f}')
    print(f'w1:{w1:.3f}')
    print(f'w2:{w2:.3f}')
    print(f'b1:{b1:.3f}')
    print(f'w3:{w3:.3f}')
    print(f'w4:{w4:.3f}')
    print(f'b2:{b2:.3f}')
    print(f'w5:{w5:.3f}')
    print(f'w6:{w6:.3f}')
    print(f'b3:{b3:.3f}')
    
    
    if E < 0.0000001: 
        break

 

 


연습문제 2. 3입력 2출력 인공신경망을 구현하고 학습하기

x1,x2,x3=0.02,0.05,0.12
w1,w2=0.15,0.20
w3,w4=0.02,0.27
w5,w6=0.37,0.52
b1,b2=0.12,0.39
y1T,y2T=0.02,0.98
lr=0.01

for epoch in range(2000):
    y1=x1*w1+x2*w2+x3*w3+1*b1
    y2=x1*w4+x2*w5+x3*w6+1*b2
    
    E=((y1-y1T)**2+(y2-y2T)**2)/2
    
    y1E=y1-y1T
    y2E=y2-y2T
    
    w1E=y1E*x1
    w2E=y1E*x2
    w3E=y1E*x3
    b1E=y1E*1
    
    w4E=y2E*x1
    w5E=y2E*x2
    w6E=y2E*x3
    b2E=y2E*1
    
    w1=w1-lr*w1E
    w2=w2-lr*w2E
    w3=w3-lr*w3E
    b1=b1-lr*b1E
    
    w4=w4-lr*w4E
    w5=w5-lr*w5E
    w6=w6-lr*w6E
    b2=b2-lr*b2E
    
    print(f'epoch={epoch}')
    print(f'y1:{y1:.3f}')
    print(f'y2:{y2:.3f}')
    print(f'w1:{w1:.3f}')
    print(f'w2:{w2:.3f}')
    print(f'w3:{w3:.3f}')
    print(f'b1:{b1:.3f}')
    print(f'w4:{w4:.3f}')
    print(f'w5:{w5:.3f}')
    print(f'w6:{w6:.3f}')
    print(f'b2:{b2:.3f}')
    
    if E < 0.0000001: 
        break

 

 

 

 

 

728x90
반응형