본문 바로가기
AI

DL : Keras : Sequential vs Functional API

by 월곡동로봇팔 2020. 3. 10.

 

 

 

 

Keras의 함수형 (Keras Functional API)

 

1. sequential API로 만든 model

In [ ]:
# 이 코드는 소프트맥스 회귀 챕터에서 가져온 코드임.
from tensorflow.keras.models import Semquential
from tensorflow.keras.layers import Dense
model=Sequential()
model.add(Dense(3, input_dim=4, activation='softmax'))
 

직관적이고 편리하지만, 단순히 층을 쌓는 것만으로는 구현할 수 없는 복잡한 인공신경망을 구현할 수 없다.

 

2. functional API로 만든 model

 

1) 전결합 피드 포워드 신경망 (Fully-connected FFNN)

In [ ]:
from tensorflow.keras.layers import Input, Dense

inputs = Input(shape(10,))
hidden1 = Dense(64, activation='relu')(inputs)
hidden2 = Dense(64, activation='relu')(hidden1)
output = Dense(1, activation='sigmoid')(hidden2)

model = Model(inputs=inputs, outputs=output)

model.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics=['accuracy'])
model.fit(data, labels, epoch=10, batch_size=32, verbose = 2, validation_data(X, Y))
 

2) 선형회귀 (linear Regression)

In [ ]:
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

inputs = Input(shape=(3,))
output = Dense(1, activation='linear')(inputs)
linear_model = Model(inputs, output)

linear_model.compile(optimizer='sgd', loss = 'mse')
linear_model.fit(x=x_train, y=y_train, epoch=5, batch_size=32, validation_data(X,Y))
 

3) 로지스틱 회귀

In [ ]:
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

inputs = Input(shape=(3,))
output = Dense(1, activation='sigmoid')(inputs)
logistic_model = Model(inputs, output)

logistic_model.compile(optimizer='sgd', loss = 'binary_crossentropy', metrics=['accuracy'])
logistic_model.optimizer.lr = 0.001
logistic_model.fit(x=dat_train, y=y_classifier_train, epochs = 5, validation_data = (dat_test, y_classifier_test))
 

cf ) optimizer를 따로 튜닝하고 싶을 때

In [12]:
from tensorflow.keras.models import Model
from keras import optimizers
model = Model()
# help(model.compile)
"""
from keras import optimizers

Arguments:
        optimizer: String (name of optimizer) or optimizer instance.
            See `tf.keras.optimizers`.
optimizer를 튜닝하고 싶으면 keras.optimizers를 넣어서

sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.compile(loss='mse', optimizer = sgd)

이렇게 튜닝해줘도 된다.
아니면 optimizer를 string 으로 넣어도 된다.

"""
# model.optimizer.lr = 0.001
Out[12]:
"\nfrom keras import optimizers\n\nArguments:\n        optimizer: String (name of optimizer) or optimizer instance.\n            See `tf.keras.optimizers`.\noptimizer를 튜닝하고 싶으면 keras.optimizers를 넣어서\n\nsgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)\n\nmodel.compile(loss='mse', optimizer = sgd)\n\n이렇게 튜닝해줘도 된다.\n아니면 optimizer를 string 으로 넣어도 된다.\n\n"
 

4) 다중 입력을 받는 모델

In [ ]:
# 최종 완성된 다중 입력, 다중 출력 모델의 예
model=Model(inputs=[a1, a2], outputs=[b1, b2, b3]
# 이번에는 다중 입력을 받는 모델을 입력층부터 출력층까지 설계해보겠습니다.

from tensorflow.keras.layers import Input, Dense, concatenate
from tensorflow.keras.models import Model

# 두 개의 입력층을 정의
inputA = Input(shape=(64,))
inputB = Input(shape=(128,))

# 첫번째 입력층으로부터 분기되어 진행되는 인공 신경망을 정의
x = Dense(16, activation="relu")(inputA)
x = Dense(8, activation="relu")(x)
x = Model(inputs=inputA, outputs=x)

# 두번째 입력층으로부터 분기되어 진행되는 인공 신경망을 정의
y = Dense(64, activation="relu")(inputB)
y = Dense(32, activation="relu")(y)
y = Dense(8, activation="relu")(y)
y = Model(inputs=inputB, outputs=y)

# 두개의 인공 신경망의 출력을 연결(concatenate)
result = concatenate([x.output, y.output])

# 연결된 값을 입력으로 받는 밀집층을 추가(Dense layer)
z = Dense(2, activation="relu")(result)
# 선형 회귀를 위해 activation=linear를 설정
z = Dense(1, activation="linear")(z)

# 결과적으로 이 모델은 두 개의 입력층으로부터 분기되어 진행된 후 마지막에는 하나의 출력을 예측하는 모델이 됨.
model = Model(inputs=[x.input, y.input], outputs=z)
 

5) RNN 은닉층 사용하기

In [ ]:
from tensorflow.keras.layers import Input, Dense, LSTM
from tensorflow.keras.models import Model
inputs = Input(shape=(50,1))
lstm_layer = LSTM(10)(inputs) # RNN의 일종인 LSTM을 사용
x = Dense(10, activation='relu')(lstm_layer)
output = Dense(1, activation='sigmoid')(x)
model = Model(inputs=inputs, outputs=output)

'AI' 카테고리의 다른 글

DL : RNN (Recurrent Neural Network)  (0) 2020.03.10
DL : Keras : 20개 뉴스 판별하기 project  (0) 2020.03.10
DL : Keras texts_to_matrix 이해하기  (0) 2020.03.10
DL : Keres 기초  (0) 2020.03.10
ML & DL : 오류 정리  (0) 2020.03.08

댓글