즐거운프로그래밍

[딥러닝] 딥러닝 학습 과정 살펴보기(numpy, matplotlib 라이브러리)

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

 

numpy, matplotlib 라이브러리를 이용하여 딥러닝 학습

 

예제 1. w, b, E의 관계 살펴보기

import numpy as np # numpy 행렬
import matplotlib.pyplot as plt # matplotlib 그래프로 표현해줌

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
ax.set_title("wbE",size=20)

ax.set_xlabel("w", size=14)
ax.set_xlabel("b", size=14)
ax.set_xlabel("E", size=14)

x=2
yT=10

w=np.random.uniform(-200,200,10000)
b=np.random.uniform(-200,200,10000)

y=x*w+b
E=(y-yT)**2/2

ax.plot(w, b, E, 'g.')
plt.show()

 

마우스를 이용하여 회전할 수 있습니다

 

 


예제 2. numpy 연산 살펴보기

import numpy as np

x=2
yT=10

w=np.random.uniform(-2,2,4)
b=np.random.uniform(-2,2,4)
print('w:',w)
print('b:',b)

y=x*w+b
E=(y-yT)**2/2
print('x*y:',x*y)
print('y:',y)
print('E:',E)

 

 

 


예제 3. 학습 과정 살펴보기(1입력 1출력 인공 신경망 과정을 animation 기능을 이용하여 표현)

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
ax.set_title("wbE",size=20)

ax.set_xlabel("w", size=14)
ax.set_xlabel("b", size=14)
ax.set_xlabel("E", size=14)

x=2
yT=10

w=np.random.uniform(2,7,10000)
b=np.random.uniform(0,4,10000)

y=x*w+b
E=(y-yT)**2/2

ax.plot(w, b, E, 'g.')

x=2
w=3
b=1
yT=10
lr=0.01

wbEs=[]
EPOCHS=200

for epoch in range(EPOCHS):
    y=x*w+1*b
    E=(y-yT)**2/2
    yE=y-yT
    wE=yE*x
    bE=yE*1
    w=w-lr*wE
    b=b-lr*bE
    
    wbEs.append(np.array([w,b,E]))
    
data=np.array(wbEs).T
line,=ax.plot([],[],[],'r.')

def animate(epoch,data,line):
    print(epoch,data[2,epoch])
    line.set_data(data[:2, :epoch])
    line.set_3d_properties(data[2, :epoch])
    
from matplotlib.animation import FuncAnimation

ani=FuncAnimation(fig, animate, EPOCHS, fargs=(data, line), interval=20000/EPOCHS)

plt.show()

 

 

 

 

* 시작점 변경 

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(projection='3d')
ax.set_title("wbE",size=20)

ax.set_xlabel("w", size=14)
ax.set_xlabel("b", size=14)
ax.set_xlabel("E", size=14)

x=2
yT=10

w=np.random.uniform(2,7,10000)
b=np.random.uniform(0,4,10000)

y=x*w+b
E=(y-yT)**2/2

ax.plot(w, b, E, 'g.')

x=2 
w=6 # 시작점 변경
b=3 # 시작점 변경
yT=10
lr=0.01

wbEs=[]
EPOCHS=200

for epoch in range(EPOCHS):
    y=x*w+1*b
    E=(y-yT)**2/2
    yE=y-yT
    wE=yE*x
    bE=yE*1
    w=w-lr*wE
    b=b-lr*bE
    
    wbEs.append(np.array([w,b,E]))
    
data=np.array(wbEs).T
line,=ax.plot([],[],[],'r.')

def animate(epoch,data,line):
    print(epoch,data[2,epoch])
    line.set_data(data[:2, :epoch])
    line.set_3d_properties(data[2, :epoch])
    
from matplotlib.animation import FuncAnimation

ani=FuncAnimation(fig, animate, EPOCHS, fargs=(data, line), interval=20000/EPOCHS)

plt.show()

 

w, b값에 따라 다른 지점에서 시작하여 오차가 줄어드는 것을 확인할 수 있습니다

 

 

 

728x90
반응형