딥러닝

딥러닝 기초

J.H_DA 2022. 4. 29. 13:47

머신러닝은 데이터를 이용해 앞 일을 예측하는 기법이고

딥러닝은 머신러닝 중 가장 좋은 효과를 내는 것이다.

딥러닝 작동시키는 법

  1. 자신의 컴퓨터에 필요한 프로그램을 설치해 사용 (쥬피터 노트북, 파이참)
  2. 구글 코랩을 이용

텐서플로우(TensorFlow)는 딥러닝 프레임워크의 일종이다. 텐서플 로우는 내부적으로 C/C++로 구현되어 있고 파이썬을 비룻하여 여 러 가지 언어에서 접근할 수 있도록 인터페이스를 제공한다.

 

# 딥러닝을 구동하는 데 필요한 케라스 함수를 불어온다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

import numpy as np
import tensorflow as tf

# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분이다.
np.random.seed(3)
tf.random.set_seed(3)

Data_set = np.loadtxt("../ml/datasets/ThoraricSurgery.csv")

# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장한다.
X=Data_set[:0:17]
Y=Data_set[:,17]

# 딥러닝 구조를 결정한다.
model =Sequential()
model.add(Dense(30, input_dim=17, activation="relu"))
model.add(Dense(30, input_dim=17, activation="relu"))
model.add(Dense(1, activation="sigmoid"))

# 딥러닝을 실행한다.
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])
model.fit(X, Y , epochs=100, batch_size=10)

loss는 예측이 실패할 확률, accuracy는 예측이 성공할 확률이다. 예측 성공률은 데이터를 분석해 데이터를 확장하거나, 딥러닝 구조를 적절하게 바꾸는 등의 노력으로 더 향상될 수 있다.

 

학습에 사용되지 않은 데이터를 따로 모아 테스트를 해 보면서 이 예측 성공률이 정말로 가능한지를 확인하는 과정까지 거치게 됨 이러한 ‘최적화 과정’을 진행하려면 딥러닝의 구동 원리의 이해가 필요하다.

 

Sequential( ) 함수는 딥러닝의 구조를 한 층 한 층 쉽게 쌓아올릴 수 있게 해 준다.

 

Sequential( ) 함수를 선언하고 나서 model.add( ) 함수를 사용해 필요한 층을 차례로 추가하면 된다.

 

출처 - 딥러닝 기초

 

 

 

 

우리가 살펴보고 있는 01_My_First_Deeplearning.ipynb에서는 model.add( ) 함수를 이용해 두 개의 층을 쌓아 올림

층을 몇 개 쌓을지는 데이터에 따라 그때 그때 결정한다. 케라스의 가장 큰 장점 중 하나는 model.add( ) 함수를 이용해 필요한 만큼의 층을 빠르고 쉽게 쌓아 올릴 수 있다는 것

  • activation : 다음 층으로 어떻게 값을 넘길지 결정하는 부분 가장 많이 사용되는 함수 : relu() 함수, sigmoid() 함수
  • 다음 값으로 넘겨주기 위한 함수
  • loss : 한 번 신경망이 실행될 때마다 오차 값을 추적하는 함수(오차를 줄이기 위한 함수)
  • optimizer : 오차를 어떻게 줄여 나갈지 정하는 함수

입력값이 네트워크 층을 거치면 예측값이 나오고, 이를 실제값과 비교해서 Loss score를 계산 한 후에 Optimizer를 통해 Weight를 업데이트 한다.

 

선형 회귀

전제 : ‘x값이 변함에 따라 y값도 변한다’ § 독립 변수 : 독립적으로 변할 수 있는 x값 종속 변수 : 독립 변수에 따라 종속적으로 변하는 값 선형 회귀 : 독립 변수 x를 사용해 종속 변수 y의 움직임을 예측하고 설명하는 작업 단순 선형 회귀(simple linear regression) : 하나의 x값 만으로도 y값 설명 가능 다중 선형 회귀(multiple linear regression) : y값 설명에 x값이 여러 개 필요할 때

 

최소 제곱법(method of least squares) : 일차 함수의 기울기 a와 y절편 b를 구할 수 있음 (다항 함수인 경우에는 경사하강법을 이용) 지금 가진 정보가 x값(입력 값, ‘공부한 시간’)과 y값(출력 값, ‘성적’)일 때, 기울기 a는

 

import numpy as np

# x 값과 y값
x=[2, 4, 6, 8]
y=[85, 96, 93, 97]

# x와 y의 평균값
mx = np.mean(x)
my = np.mean(y)
print("x의 평균값:", mx)
print("y의 평균값:", my)

# 기울기 공식의 분모
divisor = sum([(mx - i)**2 for i in x])

# 기울기 공식의 분자
def top(x, mx, y, my):
    d=0
    for i in range(len(x)):
        d+=(x[i]-mx)*(y[i]-my)
    return d
dividend=top(x,mx,y, my)

print("분모:", divisor)
print("분자:", dividend)

# 기울기와 y절편 구하기
a = dividend/divisor
b=my-(mx*a)

# 출력으로 확인
print("기울기 =", a)
728x90