# 케라스의 함수형 API(Keras Functional API) ## functional API 로 만든 모델 ### 전결합 피드 포워드 신경망(fully-connected FFNN) ``` from tensorflow.keras.layers import Input, Dense from tensorflow.keras.models import Model 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) ``` ### 선형 회귀(Linear Regression) ``` 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=dat_test, y=y_cts_test, epochs=50, verbose=0) linear_model.fit(x=dat_test, y=y_cts_test, epochs=1, verbose=1) ``` ### 로지스틱 회귀(Logistic Regression) ``` 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)) ``` ### 다중 입력을 받는 모델 ``` 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) ``` ### RNN(Recurrence Neural Network) 은닉층 사용하기 ``` 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) ``` ### 출처 - https://wikidocs.net/38861