- 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 ]
[출처]
'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 |