딥러닝

[DL]2. 딥러닝 개요

CodeJaram 2023. 9. 9. 15:12

딥러닝_02_딥러닝 개요



  1. 딥러닝: 인간의 신경망을 모방하여 병렬적 다층구조를 통해 학습하여 예측하는 기술

 

-기계는  대상을 판단하는 기준이 명확히 정해져 있지만(이분법), 사람은 대상을 판단하는 경계가 느슨하다(추상적). 정해진 기준을 조금이라도 벗어나면 대상이 아니라고 판단한다.

 

  • 딥러닝 신경망의 구조: 선형모델(y=ax+b)의 종합

→인간이 많은 뉴런의 결과를 종합하여 판단하는 것을 참고하여 선형모델 여러 개를 연결하여 학습시킴

 

*앙상블모델은 모델끼리 영향을 미치지 않지만, 딥러닝에서는 모델끼리 영향을 미침



  • 딥러닝 모델의 종류: CNN, MLP, 전이학습, RNN

 

  • 딥러닝의 특징: 병렬적 다층구조를 통해 대량의 데이터에서 복잡한 패턴이나 규칙을 찾아내는 능력이 뛰어남, 머신러닝에 비해 유연한 사고

 

 

  • 딥러닝의 사용분야: 컴퓨터 비전, 음성인식, 자연어처리,  이미지, 영상처리

 

2. 딥러닝의 역사

 

3. 머신러닝과 딥러닝의 차이점

  • 머신러닝은 테이블 형태의 데이터를 학습
  • 딥러닝은  사람이 구별하기 어려운 음성, 영상 등을 학습

 

  • 머신러닝은 사람이 선택한 특성으로 학습하여 예측
  • 딥러닝은 입력받은 데이터를 신경망 모델로 학습하여 결과 예측

 


4. 딥러닝 파트

 

5. 딥러닝 프레임워크: Tensorflow, Keras

  •  Keras: Tensorflow 내장라이브러리, 다양한 뉴럴 네트워크 모델을 지원하여 빠른 시간 내에 코딩 가능

 

[딥러닝 실습]

 ※코랩 단축키

  • 실행 단축키

-Ctrl+Enter: 실행 후 커서가 그대로 있음

-Shift+Enter: 실행 후 커서가 아래 셀로 이동

  • 마크다운 변환: Ctrl+ m+ m
  • 코드 모드 변환: Ctrl+m+y
  • 셀 아래에 추가: Ctrl+ m+ b
  • 셀 위에 추가: Ctrl+m+a
  • 단축키 설정: 도구-단축키

 

  • tensorflow 불러오기

#tensorflow 불러오기

import tensorflow as tf

 

#tensorflow 버전 확인

print(tf.__version__)

 

#외부 API 사용 시 tensorflow와 버전을 맞춰줘야 함

 

  • 현재 작업 디렉토리 확인: !pwd

#리눅스 명령어

# !명령어

 

#현재 작업 디렉토리 확인->!pwd

!pwd

 

 

  • 디렉토리 내부 폴더명 확인: !ls

#디렉토리의 내부 폴더명 확인

 

!ls

 

  • 현재 작업 디렉토리 변경: %cd

# drive와 연결하여 DeepLearning 폴더로 변경

# 드라이브 마운트 후 접근

 

# 작업 디렉토리 변경(영구적)->%cd

 

%cd "drive/MyDrive/Colab Notebooks/DeepLearning"

 

  1. 문제정의
  • 딥러닝 모델을 간단하게 생성하여 학습 및 평가하기
  • 딥러닝과 머신러닝의 차이점을 학습하기
  • keras를 이용하여 신경망을 구성해보기
  • 학생들의 성적을 예측하는 회귀모델 생성하기

 

#라이브러리

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

 

2. 데이터 불러오기

 

data=pd.read_csv('./data/student-mat.csv', delimiter=";")

 

*데이터의 특성 설명

https://huggingface.co/datasets/scikit-learn/student-alcohol-consumption

 

#컬럼 옵션 설정->pd.set_option

#모든 컬럼 보여주기->('display.max_columns', None)

 

pd.set_option('display.max_columns', None)

 

#모든 행 보여주기

# pd.set_option('display.max_rows', None)



#데이터의 정보확인

data.info()

 

#컬럼 확인

 

data.columns

 

3. 데이터 분리

#문제, 정답 데이터 분리

X=data['studytime']

y=data['G3']

 

#train, test 데이터 분리

from sklearn.model_selection import train_test_split

#데이터 분할

X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.2, random_state=10)

 

 

 4. 신경망 모델 만들기

1)머신러닝 모델링(sklearn)

-모델 생성(완성된 객체 사용)→모델학습→모델예측→모델 평가

 

2)딥러닝 모델링(tensorflow)

- 모델 생성(모델 직접 설계)→모델학습→모델예측→모델 평가

-딥러닝 모델링 과정

  • 신경망 구조 설계(단층 구조)
  • 신경망 학습 및 평가방법 설정
  • 학습 및 학습결과 시각화
  • 모델 평가 및 예측

 

1)머신러닝 모델링

#선형회귀모델(LinearRegression)

 

from sklearn.linear_model import LinearRegression

 

# MSE 측정 도구 불러오기

 

from sklearn.metrics import mean_squared_error

 

#모델 생성

lr_model=LinearRegression()

 

#머신러닝 모델은 문제데이터가 항상 2차원 이상이어야 함

#문제데이터의 차원 변경(reshape)

#(-1, 1)-> 1열에 맞춰 행 자동 구성

 

#모델 학습

lr_model.fit(X_train.values.reshape(-1,1), y_train)

 

# 모델 예측

pre = lr_model.predict(X_test.values.reshape(-1,1))

 

# 모델 평가(MSE)

mean_squared_error(y_test, pre)

 

2)딥러닝 모델링

#tensorflow 모델링 도구 불러오기

 

from tensorflow.keras.models import Sequential #모델의 뼈대

 

#신경망의 구성요소

from tensorflow.keras.layers import InputLayer, Dense, Activation

 

①신경망 구조 설계

#tensorflow 모델링 도구 불러오기

 

from tensorflow.keras.models import Sequential #모델의 뼈대

 

#신경망의 구성요소

from tensorflow.keras.layers import InputLayer, Dense, Activation

 

 

#1. 뼈대 생성

model=Sequential()

 

#2. 뼈대에 층 하나씩 추가하기

#2-1. 입력층(InputLayer)

#입력층의 구조(입력특성의 구조) 설정->input_shape

#입력특성이 1개(study time)이므로 input_shape=(1,)로 설정

model.add(InputLayer(input_shape=(1,) ))

 

#2-2. 연산층(선형모델)->Dense

#연산(선형모델)의 개수 설정->units

#선형모델의 개수가 많으면 모델성능이 향상되지만 너무 많으면 과대적합의 위험

model.add(Dense(units=10))

 

#2-3. 활성화 함수->Activation

model.add(Activation("sigmoid"))

 

#2-4. 출력층->Dense

#출력데이터의 개수 설정->unit

#예측결과 1개(성적)이므로 units=1로 설정

model.add(Dense(units=1))



②신경망 학습 및 평가 방법 설정

#2. 신경망 학습 및 평가방법 설정

 

#학습방법 설정->.compile

#loss->모델 최적화(오차측정)에 사용되는 함수

#optimizer->최적화 알고리즘 설정

 

#선형회귀모델에 적합한 방법 설정

model.compile(loss='mean_squared_error', optimizer='SGD')

 

③학습 및 학습결과 시각화

#3. 학습 및 학습결과 시각화

# h1=model.fit(X_train, y_train, epochs=20)

 

#교차검증을 위한 validation_data 분리

h1=model.fit(X_train, y_train,

             validation_split=0.2,

             epochs=20)

 

#epochs->모델의 최적화 업데이트 정도(학습 반복횟수)

#시간/step: 한 단계 실행 시 걸린 시간

#loss값이 줄어들수록 좋은 모델

 

④모델 평가 및 예측

#4. 모델 평가 및 예측

#모델 평가->evaluate(머신러닝의 score와 같은 기능)

model.evaluate(X_test, y_test)

 

#실행회차별 결과값

h1.history['loss']

 

⑤학습결과 시각화: 학습용, 검증용 데이터 loss 값 시각화(과대적합 확인)

#loss값(오차) 시각화

plt.figure(figsize=(10,5))

plt.plot(h1.history['loss'], label='train_loss')

plt.plot(h1.history['val_loss'], label='val_loss')

 

plt.legend()

 

plt.show()

 

#반복횟수가 증가할수록 loss 값이 감소

#검증용 데이터(val)를 추가하여 과대적합 여부 확인

#train 데이터와 text 데이터의 차이가 크지 않음

#일정 epochs 이상으로는 loss값 유지->과대적합 발생하지 않음

 

3)입력특성 2개로 설정하여 신경망모델 만들기

#입력특성 2개 선택하기

X=data[['famrel', 'freetime']]

y=data['G3']

 

#train, test 데이터 분리

from sklearn.model_selection import train_test_split

 

X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.2, random_state=10)

 

#tensorflow 모델링 도구 불러오기

from tensorflow.keras.models import Sequential #모델의 뼈대

 

#신경망의 구성요소

from tensorflow.keras.layers import InputLayer, Dense, Activation

 

①신경망구조 설계

#1. 뼈대 생성

model=Sequential()

 

#2. 뼈대에 층 하나씩 추가하기

#2-1. 입력층(InputLayer)

#입력층의 구조(입력특성의 구조) 설정->input_shape

#입력특성이 2개(study time)이므로 input_shape=(2,)로 설정

model.add(InputLayer(input_shape=(2,) ))

 

#2-2. 연산층(선형모델)->Dense

#연산(선형모델)의 개수 설정->units

#활성화 함수->Activation(따로 층을 추가해도 되지만 매개변수로 추가해도 됨

#선형모델의 개수가 많으면 모델성능이 향상되지만 너무 많으면 과대적합의 위험

 

model.add(Dense(units=10, activation="sigmoid"))

 

#2-4. 출력층->Dense

#출력데이터의 개수 설정->unit

#예측결과 1개(성적)이므로 units=1로 설정

model.add(Dense(units=1))

 

②신경망 학습 및 평가 방법 설정

#2. 신경망 학습 및 평가방법 설정

 

#학습방법 설정->.compile

#loss->모델 최적화에 사용되는 함수

#optimizer->최적화 알고리즘 설정

 

#선형회귀모델에 적합한 방법 설정

model.compile(loss='mean_squared_error', #모델을 평가하는 알고리즘 설정(MSE)

              optimizer='SGD' #모델의 가중치와 절편을 최적화하는 알고리즘 설정(경사하강법)

              )

 

③학습 및 학습결과 시각화

#3. 학습 및 학습 결과 시각화

 

#교차검증을 위한 validation_data 분리

h1=model.fit(X_train, y_train,

             validation_split=0.2,

             epochs=20)

 

 

④모델 평가 및 예측

#4. 모델 평가 및 예측

#모델 평가->evaluate(머신러닝의 score와 같은 기능)

model.evaluate(X_test, y_test)

 

⑤학습결과 시각화: 학습용, 검증용 데이터 loss 값 시각화(과대적합 확인)

#loss값 시각화

plt.figure(figsize=(10,5))

plt.plot(h1.history['loss'], label='train_loss')

plt.plot(h1.history['val_loss'], label='val_loss')

 

plt.legend()

 

plt.show()




[포즈 프로젝트 실습]

Teachable Machine 

https://teachablemachine.withgoogle.com/

 

 

  • 분류할 포즈 추가하기

 

  • 2개 이상의 포즈를 추가하면 학습하여 동작을 보고 어느 포즈와 닮았는지 분류함

 

  • 모델 내보내기 버튼 클릭하여 프로젝트에서 사용가능

 

'딥러닝' 카테고리의 다른 글

[DL]6. CNN  (0) 2023.09.20
[DL]5. 오차 역전파  (0) 2023.09.15
[DL]4. 다중분류  (0) 2023.09.14
[DL]3. 퍼셉트론, 다층퍼셉트론  (0) 2023.09.11
[DL]1. 텍스트 마이닝  (0) 2023.09.06