TensorFlow 101-1~101-12

2020. 12. 30. 23:40언어영역/Machine Learning

유튜버 '봉수골 개발자 이선비'의 텐서플로우 강의

'생활코드'와 같이 OpenTutorials에서 활동하시는 유튜버 이선비의 텐서플로우 강의를 수강했다. 온라인으로 쉽게 접할 수 없는 고급 지식들을 누구나 이해할 수 있게 설명해주는 이런 강의를 열어주시는 이선비님과 오픈튜토리얼즈에게 너무도 감사하다. 여러모로 도움이 되는 강의였는데, 다만 초심자를 위해 무엇을 뺄 지 고민하는 과정에서 개인적으로는 너무 많은 것들이 빠지지 않았나... 하는 생각이 들었다. 그러다보니 다 묶어서 땡 치고 넘어가는 기분. 더 깊게 공부하고싶은 입장에서는 강의를 듣다가 중간중간 '응?' 하면서 의아해하는 부분이 있었다. 이선비의 강좌 필기와 더불어 개인적으로 조사한 내용들도 추가해서 적어 두었다. 

머신러닝에서 LOSS란 무엇인가

간단히 말해서 편차 제곱의 평균 즉 분산이다...라고 영상에서 설명하고 있다. 하지만 이는 Loss를 구하는 여러 방법 중 한 가지에 불과하다. 그렇다면 Loss란 무엇인가?

인터넷 서핑 중 찾은 구글 머신러닝 용어집. 사진을 누르면 연결된다.

즉 예측의 오차를 나타낸다. 그리고 오차를 나타내는 데에는 여러가지 지표가 사용된다. 이는 구하고자 하는자료의 종류에 따라 구분된다. (...bskyvision.com/740에 따르면 손실함수와 Metric은 다르다고 한다. 공부해야지.) 아래는 그 예시이다.

Loss Funcion의 종류

  • 회귀(수치 변수)형 모델에서 : 즉 수치로 나타낼 수 있는 모델에 대한 오차범위를 구하는 함수 
    • Sum Squared Error (SSE) : 편차의 제곱합 : 데이터량이 많아질수록 커지므로 일반적 상황에서 비교하기 곤란하다.
    • Mean Squared Error (MSE) : 편차의 제곱의 평균 (=분산) : 가장 많이 쓰인다.
    • Root Mean Squared Error (RMSE) : 루트 편차의 제곱의 평균 (=표준편차) : MSE에 루트를 씌운 값.
    • Mean Average Error (MAE) : 편차 절댓값의 평균.

(MSE를 이용해서 F Value를 구할 수도 있다. 다음 게시물에서 설명한다.)

  • 범주(이름 변수)형 모델에서 : 즉 이름으로 분류하는 모델에 대해 오차범위를 구하는 함수 
    • Cross Entropy Error (CEE) : 단순히 말해서 범주에 속할 확률을 구할때 오차를 구하는 함수이다. 자세한 내용은 다음 게시물에서 다루자.
      • Binary Cross Entropy (BCE) : 두 개의 범주로 나뉘어 있을 때 사용한다. (OX나 남녀 등)
      • Categorical Cross Entropy (CCE) : 두 개 이상의 범주로 나위어 있을 때 사용한다. (혈액형, 부서 등)
      • Sparse Cross Entropy (SCE) : 정수 범주로 나뉘어 있을 때 사용한다. (1,2,3,4,5 ...)

여기서 더 많은 종류의 Loss Function을 찾아볼 수 있다.

 

독립변수와 종속변수의 관계

y=w1x1+w2x2+...+b

y는 종속변수, 각 x1~xn은 독립변수, w1~wn은 가중치, b는 편향이다. 이름이 모든 걸 설명해준다. 그리고 이 수식을 Perceptron이라고 한다.

퍼셉트론(Perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 제안한 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘입니다.

아... 정보 고마워!

보스턴 집값 예측해보기 (예제)

링크는 여기 있다. 

# 보스턴 집값 예측
- github csv url: https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv
#라이브러리 사용
import tensorflow as tf
import pandas as pd
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
print(보스턴.columns)
보스턴.head()

print(보스턴.columns)는 보스턴 csv파일의 속성을 보여준다. 보스턴.head()는 보스턴 csv파일 미리보기이다.(앞부분 일부분을 보여준다.)

# 독립변수, 종속변수 분리
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)

.shape는 모양새가 어떻게 생겼는지에 대해서 나타내는데, 예로 print(독립.shape)를 치면 (506, 13)이라고 나온다. 데이터의 양이 506개이며 속성이 13개 있다는 의미이다.

# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[13])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

keras는 tensorflow의 인공지능 API이다. 

layers, input, dense는 함의하는 의미가 뭔가 많다. Layer는 인공지능의 구조에서 나온 말이라고 한다. Dense같은 경우는 완전연결층을 의미한다고 하는데 이게 뭐 함수로 치면 일대일대응인가보다. input은 실제로 input을 의미하는 것 같고... 추가로 공부해야겠다.

# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)

fit은 학습시킨다는 걸 의미한다 에포크(Epoch)는 반복횟수를 의미한다. Verbose는 사전적인 의미가 '말이 많은'이란 뜻인데, 이 값이 0이면 조용히, 1이면 Progress Bar가, 2이면 반복(에포크)당 한 줄씩 표현된다.

# 4. 모델을 이용합니다
print(model.predict(독립[5:10]))
# 종속변수 확인
print(종속[5:10])
# 모델의 수식 확인
print(model.get_weights())

모델을 쓴다.

확실히 빼주셔서 감사드릴 것도 있고, 아쉬운 것들도 있었다. 중요한 건 유튜버가 뭘 뺐느냐가 아니라 내가 앞으로 뭘 더 공부해야할 지에 대한 개괄을 얻었다는 것이다. 간단히 정리하자면

  • Loss Function과 Metric Function의 차이점
  • F-Value를 구하는 방법과 P-Value
  • Cross Entropy Error 의 구조와 작동 방식
  • 인공신경망의 구조(퍼셉트론, Layer, Input, Dense)

이렇게 되겠다. 1월 4일 전까지 파이팅 하자!