Python/인공지능

01_ 선형회귀 알고리즘 구현

728x90

이번에 인프런의 인공지능 강의를 수강하게 되었다.

 

평소에 관심도 있긴 했지만 졸업작품을 진행하는데 인공지능부분에서 막혀버려서... 수강하게 되었다. 관련 내용을 정리해보고자 한다!

 

 

https://www.inflearn.com/course/tensorflow-%EC%8B%A4%EC%A0%84%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EC%9D%B8%EC%9B%90/dashboard

 

차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원 - 인프런 | 강의

차량 번호판 인식 실전 프로젝트를 통해 딥러닝/TensorFlow/컴퓨터비전 기초부터 실무 응용까지 전 과정을 한번에 학습할 수 있는 올인원 형태의 강의입니다. 다양한 실습을 통해 Custom Dataset에 최

www.inflearn.com

 

아직 1강밖에 듣진 않았지만 강의 질은 좋은것 같다!

 

참고로 필자는 인공지능을 아예 접해보지 않은건 아니다. 간단한 기초정도를 다룬 강의를 수강한적이 있고 학교에서 인공지능 이론 등을 다뤄본적이 있어 사전지식이 아예없는편은 아닌데, 사전지식이 없다면 조금 공부하고 들으면 더 좋을 것 같다. 물론 1강에서 이론설명도 있으니 아예 몰라도 괜찮을 것 같긴 하다.

 

https://github.com/solaris33/deep-learning-tensorflow-book-code

 

GitHub - solaris33/deep-learning-tensorflow-book-code: [『텐서플로로 배우는 딥러닝』, 솔라리스, 영진닷컴, 2

[『텐서플로로 배우는 딥러닝』, 솔라리스, 영진닷컴, 2018] 도서의 소스코드입니다. Contribute to solaris33/deep-learning-tensorflow-book-code development by creating an account on GitHub.

github.com

해당강의는 위 git에서 자료도 많이 줘서 좋은 것 같다. 

 

 

 

 

 

아무튼 아주 간단한 선형회귀 알고리즘을 직접 구현해보면서 감을 잡아보자.

 

 

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#오류해결

import tensorflow as tf

 

 

시작은 tesorflow 라이브러리를 불러오면서 시작이 된다. 이때 나의 경우  위 코드를 넣어줘야 오류가 발생하지 않는다. 코드를 안넣으면 오류메시지가 출력되는데, 구글링을 해서 찾아서 해결하였다.

 

 

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#오류해결

import tensorflow as tf


# 선형회귀 모델(Wx + b)을 위한 tf.Variable을 선언합니다.
W = tf.Variable(tf.random.normal(shape=[1]))
b = tf.Variable(tf.random.normal(shape=[1]))

@tf.function
def linear_model(x):
  return W*x + b

# 손실 함수를 정의합니다.
# MSE 손실함수 \mean{(y' - y)^2}
@tf.function
def mse_loss(y_pred, y):
  return tf.reduce_mean(tf.square(y_pred - y))

# 최적화를 위한 그라디언트 디센트 옵티마이저를 정의합니다.
optimizer = tf.optimizers.SGD(0.01)

# 최적화를 위한 function을 정의합니다.
@tf.function
def train_step(x, y):
  with tf.GradientTape() as tape:
    y_pred = linear_model(x)
    loss = mse_loss(y_pred, y)
  gradients = tape.gradient(loss, [W, b])
  optimizer.apply_gradients(zip(gradients, [W, b]))

# 트레이닝을 위한 입력값과 출력값을 준비합니다.
x_train = [1, 2, 3, 4]
y_train = [2, 4, 6, 8]

# 경사하강법을 1000번 수행합니다.
for i in range(1000):
  train_step(x_train, y_train)

# 테스트를 위한 입력값을 준비합니다.
x_test = [3.5, 5, 5.5, 6]
# 테스트 데이터를 이용해 학습된 선형회귀 모델이 데이터의 경향성(y=2x)을 잘 학습했는지 측정합니다.
# 예상되는 참값 : [7, 10, 11, 12]
print(linear_model(x_test).numpy())

 

 

그 후엔, 이론에서 배운대로 모델의 variable선언, 손실함수 정의, 그라디언트 디센트 옵티마이저 정의 후

 

train_step으로 이름지은 함수를 정의해주고 100번 경사하강법을 실행해 준후에 코드를 실행하면

 

 

 

[ 7.0037856 10.0139265 11.017307  12.020688 ]

 

 

 

나는 위와같은 값으로 성공적으로 잘 나왔다 해당값은 인공지능이기에 할때마다 다르게 나온다!

 

 

참고로, 나는 파이참으로 돌렸는데, 구글 코랩을 이용하면 GPU를 사용할 수 있던걸로 알아서 아마 코드가 복잡해 지면 코랩으로 돌리지 않을까 싶다.

 

 

 

 

케라스 서브클래싱

 

TensorFlow 2.0에서 딥러닝 알고리즘은 초보자용과 전문가용으로 활용 방법이 나누어져 있다.

 

www.tensorflow.org/overview?hl=ko  

 

TensorFlow Core | 초보자 및 전문가를 위한 머신러닝

연구자, 실무자, 학생, 개발자 커뮤니티에서 지원하는 오픈소스 ML 라이브러리로 나만의 머신러닝 프로젝트를 시작하세요.

www.tensorflow.org

 

위 링크를 한번 간단히 읽고 와보자

 

초보자용은 더 간결하고 편리하지만 디테일한 부분을 자동적으로 구현해주는 부분이 있어 해당 부분을 수정하고 싶을때 어려움이 있다.

 

 

 

 

728x90

'Python > 인공지능' 카테고리의 다른 글

06_CNN ILSVRC,CNN모델들  (0) 2022.03.18
05_CNN 기초  (0) 2022.03.18
04_오토인코더  (0) 2022.03.18
03_다중 퍼셉트론 MLP,인공신경망  (0) 2022.03.18
02_ Softmax Regression을 활용한 MNIST숫자분류기 구현  (0) 2022.03.13