오답노트
[Keras] Sequential API 본문
Keras
케라스는 원래 독자적인 딥러닝 라이브러리였다. 하지만 케라스의 창시자가 구글에 입사하게 되면서 텐서플로우에서 케라스 라이브러리를 제공하게 되었다.
Sequential API & Functional API
Sequential API는 레이어별로 모델을 만들 수 있고, 사용하기가 쉽다. 하지만, 레이어의 공유나 레이어의 분기는 불가능하다. 또한 여러 입력 또는 출력을 가질 수 없다.
Functional API는 Sequential API보다 더 유연하게 사용할 수 있다. 계층의 분기 또는 공유가 허용된다. 또한 여러 입력 또는 출력을 가질 수 있다. 따라서 좀 더 복잡한 모델을 만드는데 도움이된다.
Sequential API 실습
Linear Regressoin
# 라이브러리 호출
import tensorflow as tf
from tensorflow import keras
import numpy as np
# 데이터 생성
y_lst = [x*2 + 1 for x in range(0,11)]
x = np.array(range(0,11))
y = np.array(y_lst)
print(x) # [ 0 1 2 3 4 5 6 7 8 9 10]
print(y) # [ 1 3 5 7 9 11 13 15 17 19 21]
print('shape of x : ',x.shape) # shape of x : (11,)
print('shape of y : ',y.shape) # shape of y : (11,)
'''
모델링
'''
# 케라스 세션 클리어
keras.backend.clear_session()
#모델 선언
model = keras.models.Sequential()
#레이어 추가
model.add(keras.layers.Input(shape=(1,)))
model.add(keras.layers.Dense(1))
#모델 컴파일
model.compile(loss = 'mse' , optimizer='adam')
#모델 학습
model.fit(x,y,epochs=10,verbose=1)
#모델 예측
print(model.predict(x).reshape(-1))
# [0.0099975 0.65813625 1.306275 1.9544138 2.6025527 3.2506914 3.8988302 4.5469685 5.1951075 5.8432465 6.491385 ]
print(y)
# [ 1 3 5 7 9 11 13 15 17 19 21]
- backend.clear_session() : 케라스는 자동 생성된 자동 생성된 레이어 이름을 고유화하는데 사용하는 전역상태를 관리한다. 만약 많은 모델을 생성하는 경우, 전역상태는 많은 양의 메모리를 사용하므로 지우고 싶을 수 있다. 해당 메소드를 호출하면 전역 상태가 해제되어 메모리를 확보할 수 있다.
- models.Sequential() : 시퀀셜 모델 객체를 생성한다.(https://www.tensorflow.org/api_docs/python/tf/keras/Sequential)
- model.add : 레이어 스택 위에 레이어 인스턴스를 추가한다.
- layers.Input : 입력 레이어를 생성한다. (https://www.tensorflow.org/api_docs/python/tf/keras/Input)
- shape : 배치 크기를 포함하지 않는 튜플이다.
- layers.Dense : 뉴럴 네트워크 레이어를 생성한다. (https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense)
- units(첫번째 인자) : 출력 공간의 차원
- activation : 사용할 알고리즘을 입력한다. default는 선형회귀이다.
- model.compile : 학습을 위한 모델을 구성한다.
- loss : 손실함수에 대해 설정할 수 있다. (https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss)
- optimizer : 최적화에 대해 설정할 수 있다. (https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)
- adam : Adam 최적화는 1차 및 2차 모멘트의 적응적 추정을 기반으로 하는 확률적 경사 하강법이다.
- metrics : 학습시 loss 다음으로 사용되는 보조 측정도구로서 샘플 가중치 없이 평가된다. (https://www.tensorflow.org/api_docs/python/tf/keras/metrics)
- model.fit : 지정한 Epoch(데이터 세트에 대한 학습 반복 수) 동안 모델을 학습시킨다.
- model.predict : 학습된 모델이 입력된 데이터를 통해 예측을 출력한다.
Logistic Regression
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
x = cancer.data
y = cancer.target
print(x.shape, y.shape) # (569, 30), (569,)
#모델링
# 케라스 세션 클리어
keras.backend.clear_session()
#모델 선언
model_cancer = keras.models.Sequential()
#레이어 추가
model_cancer.add(keras.layers.Input(shape=(30,)))
model_cancer.add(keras.layers.Dense(1,activation='sigmoid'))
#모델 컴파일
model_cancer.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#모델 학습
model_cancer.fit(x,y,epochs=10,verbose=1)
print(model_cancer.predict(x).reshape(-1)[:10]) # [0.0000000e+00 4.7399735e-35 1.6038484e-27 1.4171174e-01 1.9208638e-11 2.0547948e-07 5.4881117e-28 8.3965273e-13 1.2773573e-03 4.2186571e-06]
print(y[:10]) # [0 0 0 0 0 0 0 0 0 0]
'Python > DL' 카테고리의 다른 글
[Keras] EarlyStopping (0) | 2022.09.15 |
---|---|
[Keras] Flatton Layer (0) | 2022.09.15 |
[Keras] ANN (0) | 2022.09.14 |
[Keras] MultiClass - SoftMax (0) | 2022.09.13 |
[Keras] Functional API (0) | 2022.09.13 |