딥러닝 - 텐서플로우의 기초, 개념, 간단 예시

반응형

텐서플로우 (TensorFlow)

  • 머신러닝을 위한 엔드 투 엔드 오픈 플랫폼
  • 머신러닝 모델을 쉽게 만들 수 있음
  • 케라스 기반

케라스 (Keras)

  • 사용자 친화적인 API를 사용
  • 신속한 프로토타입 제작, 최첨단 연구 및 프로덕션 가능
  • 텐서플로우의 상위 수준 API는 신경망을 정의하고 학습시키기 위해 케라스를 기반으로 함

사용하기 전에...

  • 구글 코랩 (Colab)
    • 머신 러닝 용도로 사용하기 때문에 텐서플로우가 내장되어 있음, 설치 할 필요 X

 

  • 아나콘다 환경 (Python, Jupyter Notebook)
    • 데이터 분석 용도로 사용하기 때문에 텐서플로우가 없음, 설치해야 함
conda install tensorflow

텐서플로우 라이브러리 호출

import tensorflow as tf
from tensorflow import keras

모델링

  • 계층(레이어)과 뉴런(유닛)의 갯수를 설정
model = tf.keras.Sequential( [tf.keras.layers.Dense(units=1, input_shape=(1,) ) ] )
  • Sequential 클래스 : 함수와 비슷하지만 대문자로 구분, 뉴럴 네트워크 모델링의 자체, 틀을 의미
  • Dense : 계층 (layers)
    • tf.keras.layers.Dense()
      • Dense Parameter
        • units : 유닛(노드)의 수
        • activation : 활성 함수 종류
        • input_shape : 입력층 크기 설정

컴파일

  • 컴파일을 하기 위해서는 2개의 함수(error/loss, optimizer) 필요

 

loss : 학습을 통해 예측한 값과 실제 값의 손실을 설정

  • SSE(Sum of Squares Error) : 제곱의 합
  • MSE(Mean Squared Error) : 제곱의 합의 평균
  • MAE(Mean Absolute Error) : 절대갑의 합의 평균
  • RMSE(Root Mean Squared Error) : 제곱의 합의 평균에 루트를 씌운 값

 

optimizer : 오차/손실을 최소화하기 위하여 최적화 설정

  • Adam : 단순하게 가장 많이 사용되는 옵티마이저, 옵티마이저 사용이 어렵다면 adam을 사용
  • 옵티마이저 예) 오솔길 길 찾기에 따른 옵티마이저 종류 설명


예시를 통한 딥러닝 설명

  • 예시 : 1개(x)당 50원(y)인 사탕이 7개일 경우 얼마일까?

 

학습 데이터 분리 (수식 설정)

  • 머신러닝 학습을 위한 데이터를 x와 y로 분리하여 수식 설정
    •  
x = [1, 2, 3, 4, 5, 6] # 갯수 설정
y = [50, 100, 150, 200, 250, 300] # 사탕 가격 설정

 

머신러닝 학습

  • epochs : 가중치를 설정하여 오차를 구하는 과정의 횟수
model.fit(x, y ,epochs= 500)

 

머신러닝 예측

  • 학습을 리스트의 객체로 하였기 때문에 같은 객체를 넣어주어야 하므로 리스트 객체로 값 대입
# x,y를 리스트로 하여 학습시켰기 때문에 리스트로 값을 넣어주어야 함
model.predict( [7] )

 

결과값 확인

  • 500번의 학습을 거쳐 7*50 = 350에 근사한 값을 출력


전체 소스 코드

import tensorflow as tf
import numpy as np
from tensorflow import keras

def modeling(y_new):
    x = [ 1, 2, 3, 4, 5, 6 ]
    y = [ 50, 100, 150, 200, 250, 300 ]
    model = tf.keras.Sequential( [tf.keras.layers.Dense(units=1, input_shape=(1,) ) ] )
    model.compile(loss='mse', optimizer='sgd')
    model.fit(x, y, epochs=500)
    return model.predict(y_new)[0]

prediction = modeling( [7] )
print(prediction)
반응형