Computer Engineering/AI

선형회귀 / TensorFlow

onenewkong 2023. 1. 13. 15:53

1. 선형회귀 - 최소제곱법

2. 평균제곱근오치(RMSE)

3. 경사하강법: 오차가 가장 작은 점, 미분 기울기 사용, 오차를 비교하여 가장 작은 방향으로 이동

4. a, b 편미분: a, b 편미분 후 learning rate 곱해가며 a, b값을 최적의 값(오차가 작은 값)으로 갱신

 

TensorFlow: tensor를 흘려보내면서(flow) 데이터를 처리하는 라이브러리

텐서를 포함한 계산을 정의하고 실행하는 프레임워크(소프트웨어 프레임워크는 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조)

텐서플로우의 텐서를 다차원 어레이의 일반화 혹은 아무 차원이나 가질 수 있는 값들의 집합

텐서를 기존의 numpy array와 같게 생각하기도 하는데 절반은 맞음

텐서플로우 내부의 모든 데이터는 텐서 통해 표현됨

 

그래프 세션

수식 -> 그래프 만들기 -> 세션에서 실행 -> 결과값

노드와 엣지로 구성됨

노드: operation

엣지: tensor

 

1. 텐서플로우의 노드 정의

2. sess.run()을 통해 실행

3. 그래프 속에 있는 어떠한 값들의 업데이트, 실행

 

-> 그래프를 세션을 통해 실행

 

버전 1.x, 2.x 관련하여,,,

일부 모델은 즉시 실행 활성화 후 오버헤드가 증가한 경우도 있음

 

 텐서의 구성: Rank, Shape, Type

Rank: 차원(텐서의 구조)

Shape: 몇 개의 행과 열을 갖는지

Type: 텐서의 값이 어떤 타입인지

 

constant: 상수

variable: 변수

placeholder: 먼저 만들고 값을 나중에 지정(ver 1.x)

-> 딕셔너리 형태로, key로 타입 지정하고 value로 값 지정함

 

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

input_data = [1, 2, 3, 4, 5]

x = tf.placeholder(dtype=tf.float32)
y = x * 2

sess = tf.Session()
result = sess.run(y, feed_dict={x:input_data})       # placeholder
sess.close()

print(result)

 

Broadcasting

두 행렬 A, B 중 크기가 작은 행렬을 크기가 큰 행렬과 shape이 맞게끔 늘려주는 것을 의미함

shape을 확장하는 것은 가능하지만 축소하는 것은 데이터 손실 때문에 불가능함

 

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

data = [[2, 81], [4, 93], [6, 91], [8, 97]]
x_data = [x_row[0] for x_row in data]
y_data = [y_row[1] for y_row in data]

a = tf.Variable(tf.random_uniform([1], 0, 10, dtype = tf.float64, seed = 0))
b = tf.Variable(tf.random_uniform([1], 0, 100, dtype = tf.float64, seed = 0))

y = a * x_data + b

rmse = tf.sqrt(tf.reduce_mean(tf.square(y - y_data)))

learning_rate = 0.1

gradient_decent = tf.train.GradientDescentOptimizer(learning_rate).minimize(rmse)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for step in range(2001):
        sess.run(gradient_decent)
        if step % 100 == 0:
            print("Epoch: %.f, RMSE = %.04f, 기울기 a  = %.4f, y 절편 b = %.4f" % (step, sess.run(rmse), sess.run(a), sess.run(b)))

tf.global_variables_initializer(): 세션 밖에 있는 값을 세션 안으로 넣어줌

 

과적합

학습 데이터를 과도하게 학습하여 학습 데이터에 대해서는 정확도가 높지만 실제 데이터나 테스트 데이터에 대해서는 정확도가 낮은 현상

 

 

오늘 자 비교과 수업 내용 정리

- 김상모 교수님 인공지능 입문 교육

- 5회차: 선형회귀 이론 및 실습

 

 

'Computer Engineering > AI' 카테고리의 다른 글

과적합  (0) 2023.01.20
다중분류  (0) 2023.01.19
로지스틱 회귀 / Keras  (0) 2023.01.16
선형회귀  (0) 2023.01.11