딥러닝_02_딥러닝 개요
- 딥러닝: 인간의 신경망을 모방하여 병렬적 다층구조를 통해 학습하여 예측하는 기술
-기계는 대상을 판단하는 기준이 명확히 정해져 있지만(이분법), 사람은 대상을 판단하는 경계가 느슨하다(추상적). 정해진 기준을 조금이라도 벗어나면 대상이 아니라고 판단한다.
- 딥러닝 신경망의 구조: 선형모델(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"
- 문제정의
- 딥러닝 모델을 간단하게 생성하여 학습 및 평가하기
- 딥러닝과 머신러닝의 차이점을 학습하기
- 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 |