본문 바로가기
DL

TensorFlow 2.0을 사용하여 Keras 모델을 생성하는 3가지 방법

by geewon_v 2023. 11. 24.

 

 

  1. Sequential API
  • 레이어의 흐름이 순차적인 경우 사용 (layer-by-layer)
  • 텐서가 이전 레이어에서 다음 레이어로 바로 이어질 때에 사용 가능

 

# 공부시간에 따른 성적 결과 예측
# x_data = [[1.],[2.],[3.],[4.],[5.]]
x_data = np.array([1,2,3,4,5], dtype=np.float32)
y_data = np.array([11,39,55,66,70], dtype=np.float32)
print(np.corrcoef(x_data, y_data))   # 0.95469145

model = Sequential()
model.add(Dense(units=2, input_dim=1, activation='relu'))
model.add(Dense(units=1, activation='linear'))
print(model.summary())

opti = optimizers.Adam(learning_rate = 0.1)
model.compile(optimizer=opti, loss='mse', metrics=['mse'])
history = model.fit(x=x_data, y=y_data, batch_size=1, epochs=100, verbose=2)
loss_metrics = model.evaluate(x=x_data, y=y_data, batch_size=1, verbose=0)
print('loss_metrics : ', loss_metrics)
from sklearn.metrics import r2_score
print('설명력 : ', r2_score(y_data, model.predict(x_data)))
print('실제값 : ', y_data)
print('예측값 : ', model.predict(x_data).ravel())

new_data = [1.5,2.2,6.8,8.0]
print('새 예측값 : ', model.predict(new_data).flatten())

import matplotlib.pyplot as plt
plt.plot(x_data.flatten(), model.predict(x_data), 'b', x_data.flatten(), y_data, 'ko')
plt.show()

# mse의 변화량
plt.plot(history.history['mse'], label='mean squared error')
plt.xlabel('epoch')
plt.show()

 

 

 

 

결과 값

 

설명력 :  -0.4794422215452592
실제값 :  [11. 39. 55. 66. 70.]

1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 26ms/step
예측값 :  [33.32736 33.32736 33.32736 33.32736 33.32736]

1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 53ms/step
새 예측값 :  [33.32736 33.32736 33.32736 33.32736]

 

 

 

 

 

   2. Functional API

 

  • equential API보다 유연한 API로 다음의 기능을 사용할 수 있음
  • 여러 개의 input을 받거나 여러 개의 output을 내야 하는 경우
  • Layer을 공유하는 경우 (샴 네트워크 등....)
  • Residual Network 구현

 

from keras.layers import Input
from keras.models import Model

inputs = Input(shape=(1,))
# outputs = Dense(units=1, activation='linear')(inputs)  # 이전 층을 다음 층 함수의 입력으로 사용하도록 함
output1 = Dense(units=2, activation='relu')(inputs)
output2 = Dense(units=1, activation='linear')(inputs)

model2 = Model(inputs, output2)

opti = optimizers.Adam(learning_rate = 0.1)
model2.compile(optimizer=opti, loss='mse', metrics=['mse'])
history = model2.fit(x=x_data, y=y_data, batch_size=1, epochs=100, verbose=2)
loss_metrics = model2.evaluate(x=x_data, y=y_data, batch_size=1, verbose=0)
print('loss_metrics : ', loss_metrics)
print('설명력 : ', r2_score(y_data, model2.predict(x_data)))
print('실제값 : ', y_data)
print('예측값 : ', model2.predict(x_data).ravel())

new_data = [1.5,2.2,6.8,8.0]
print('새 예측값 : ', model2.predict(new_data).flatten())

 

 

 

 

결과 값

 

설명력 :  0.8860080496775975
실제값 :  [11. 39. 55. 66. 70.]

1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 27ms/step
예측값 :  [24.884714 37.089947 49.29518  61.500412 73.70564 ]

1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 54ms/step
새 예측값 :  [ 30.987331  39.530994  95.675064 110.32134 ]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[출처]

https://littlefoxdiary.tistory.com/82

https://pyimagesearch.com/2019/10/28/3-ways-to-create-a-keras-model-with-tensorflow-2-0-sequential-functional-and-model-subclassing/

'DL' 카테고리의 다른 글

이미지 분류 : MNIST  (0) 2023.11.28
softmax 함수  (0) 2023.11.27
활성화 함수 - 시그모이드(Sigmoid) / 렐루(Relu) 함수  (1) 2023.11.23
Keras란?  (1) 2023.11.22
원-핫 인코딩(One-Hot Encoding)  (0) 2023.11.22