archive
[코드 리뷰 프로젝트] 경사하강법 구현 백업 본문
1. 경사하강법 (Gradient Descent) 을 구현할 데이터 쌍을 numpy 라이브러리를 활용해 생성한다
import numpy as np
xy = np.array([[1., 2., 3., 4., 5., 6.],
[10., 20., 30., 40., 50., 60.]])
x_train = xy[0]
y_train = xy[1]
- split, stack, concatenate과 같은 방법들도 array가 클 때는 자주 사용한다. 특히 해당 방법을 사용할 때 axis를 잘 설정해야 원하는 결과를 얻을 수 있다.
-numpy의 split 메소드, vsplit 메소드, flatten 메소드 활용
split_xy = np.split(xy, 2, axis=0)
x_train = split_xy[0].flatten()
y_train = split_xy[1].flatten()
or
split_xy = np.vsplit(xy, 2)
x_train = split_xy[0].flatten()
y_train = split_xy[1].flatten()
2. 임의의 숫자로 학습률 Learning rate, weight 가중치 및 bias 초기화 (파라미터 초기값 설정)
np.random.seed(0)
beta_gd = np.random.uniform(-1, 1, size=(1,))
bias = np.random.uniform(-1, 1, size=(1,))
learning_rate = 0.001
-uniform distribution으로부터 샘플링을 하는 np.random.rand를 사용하는 방법도 있다.
beta_gd, bias = np.random.rand(2,)
3. 경사하강법 구현 및 학습 진행
#학습 epoch 수 = 1000, 100회마다 학습 현황 출력하도록 반복문 formatting을 통해 설정
for i in range(1000):
pred = (x_train * beta_gd) + bias
error = ((y_train-pred)**2).mean()
#mean() 함수 사용하는 이유는 w와 b가 벡터 행렬로 주어졌기 때문에 합산해서 계산해야함
gd_w = ((y_train-pred) * 2 * x_train).mean()
gd_b = ((y_train-pred) * 2).mean()
beta_gd -= learning_rate * gd_w
bias -= learning_rate * gd_b
if i % 100 == 0 :
# print(beta_gd)
print('Epoch {:10d}/1000 cost : {:10f}, w: {:10f}, b: {:10f}'.format(i, error, beta_gd.item(), bias.item()))
-formatting하는 방법 3가지 -> %string, format 함수 사용, f-string 사용
## numpy에 대해서 완전히 익히고 있어야 할 듯... 무슨 함수 주로 사용되는지, 어떤 함수들이 있는지 확실하게 공부하고 바로바로 쓸 수 있도록 익혀야겠다 특히 선형대수학 연산 함수들...!
0. 전체 코드
본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.
'ML_AI > 네이버 부클 AI 엔지니어 기초 다지기 : AI Tech 준비과정' 카테고리의 다른 글
[7주차 (1)] Sequential Model -RNN (0) | 2024.06.07 |
---|---|
[코드 리뷰 프로젝트] 2레이어 인공신경망 구현 백업 (0) | 2024.06.06 |
[6주차 (4)] 최적화 - 2 (0) | 2024.06.02 |
[6주차 (3)] 최적화 - 1 (0) | 2024.06.02 |
[6주차 (2)] 뉴럴 네트워크 -MLP (0) | 2024.06.02 |