Sesac 48일차

SungMin·2022년 12월 9일
0

Sesac-ML_DL

목록 보기
9/16

교재 : 백견불여일타 딥러닝 입문 with 텐서플로우 2.x, 로드북

준비하기

  • 구글 Colab이용
  • 런타임 유형 변경 : 여기서 GPU를 연결할 수 있음

케라스

  • 케라스는 텐서플로와 호환할 때 높은 유연성을 가짐
  • 모듈화하여 사용
  • 모델 : 케라스의 핵심.
  1. 학습데이터 준비
  2. 문제해결 모델 정의
  3. loss, optimizer설정
  4. 모델을 학습시키고 추론

관련 용어

  • 데이터 전처리
  • 학습하기
  • 클래스 불균형 : SMOTE
  • 회귀와 분류
  • 원핫 인코딩 : 하나의 클래스만 1이고 나머지 클래스는 전부 0인 인코딩
  • 교차 검증
  • 하이퍼파라미터 : 사용자가 세팅해줘야하는 값. 주로 경험으로 결정함. 학습률, 매치크기, 에폭, 드롭아웃률 등이 있음.
  • 하이퍼파라미터 튜닝 : 파라미터값 조정. 그리드서치와 랜덤 서치 등을 주로 사용.
  • 배치와 배치 크기
  • 에폭과 스텝
  • 과대적합과 과소적합
import sys

sys.version

import tensorflow as tf

tf.__version__
  • 텐서플로 기본연산
a = tf.constant(2) # 텐서를 선언

print(a)

print(tf.rank(a)) # 해당 텐서의 랭크를 계산

b = tf.constant([1,2])
print(tf.rank(b))

딥러닝의 역사

퍼셉트론

  • 활성화 함수 : 입력값 -> 가중치 -> 출력값
  • 계단 함수 : 0과 1을 출력하는 함수
  • 퍼셉트론이 XOR 게이트 문제를 해결하지 못해서 AI겨울이 옴
  • 이 문제를 다층 퍼셉트론으로 해결
import tensorflow as tf

tf.random.set_seed(777)

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD, RMSprop
from keras.losses import mse

x=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([[0],[1],[1],[1]])

model = Sequential()
model.add(Dense(1,input_shape=(2,),activation='linear')) # Dense층에서 2개의 입력값으로 결과값 1개가 나옴

model.compile(optimizer=SGD(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=500) # epoch = 전체학습횟수

model.get_weights()

(0*0.49431458)+(0*0.37552658)+0.32719323
0.32719323
(0*0.49431458)+(1*0.37552658)+0.32719323
0.7027198100000001
(1*0.49431458)+(0*0.37552658)+0.32719323
0.82150781
(1*0.49431458)+(1*0.37552658)+0.32719323
1.19703439

x=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([[0],[0],[0],[1]])

model = Sequential()
model.add(Dense(1,input_shape=(2,),activation='linear')) #

model.compile(optimizer=SGD(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=500) 

model.get_weights()

(0*0.41167912)+(0*0.48379776)-0.18801045

(0*0.41167912)+(1*0.48379776)-0.18801045

(1*0.41167912)+(0*0.48379776)-0.18801045

(1*0.41167912)+(1*0.48379776)-0.18801045

x=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([[1],[1],[1],[0]])

model = Sequential()
model.add(Dense(1,input_shape=(2,),activation='linear')) 

model.compile(optimizer=SGD(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=500) 

model.get_weights()

(0*-0.23936202)+(0*-0.36854893)+1.0174638

(0*-0.23936202)+(1*-0.36854893)+1.0174638

(1*-0.23936202)+(0*-0.36854893)+1.0174638

(1*-0.23936202)+(1*-0.36854893)+1.0174638

x=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([[0],[1],[1],[0]])

model = Sequential()
model.add(Dense(1,input_shape=(2,),activation='linear')) 

model.compile(optimizer=SGD(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=500) 

model.get_weights()
  • 결과값이 어긋나므로 학습 숫자를 늘림
model = Sequential()
model.add(Dense(1,input_shape=(2,),activation='linear')) # Dense층에서 2개의 입력값으로 결과값 1개가 나옴

model.compile(optimizer=SGD(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=1000) # epoch = 전체학습횟수

x=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([[0],[1],[1],[0]])

model = Sequential()
model.add(Dense(32, input_shape=(2, ),activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer=RMSprop(), 
                    loss=mse, 
                    metrics=['acc'])
model.fit(x,y,epochs=500)

model.get_weights()

model.predict(x)

MNIST 데이터베이스

profile
초보 개발자의 학습 저장용 블로그

0개의 댓글