keras basics2

¾ÕÀå¿¡¼­ Äɶ󽺸¦ ±×´ë·Î ¹«ÀÛÁ¤ µû¶ó ÇßÁö¸¸ ½ÇÁ¦°ª°ú ¿¹Ãø°ªÀÇ Â÷ÀÌ°¡ ³Ê¹« Å©°Ô ³ª¿Ô´Ù.

¹«ÀÛÁ¤ µû¶óÇÑ °Í - keras basics :tutorial04.html

ºñ½ÁÇÑ°ª Ãâ - keras basics :tutorial05.html

À̹øÀå¿¡¼­´Â Á¤È®µµ¸¦ ³ô¿© º¸ÀÚ.
Me

1. µ¥ÀÌÅÍ Àüó¸®
2. ¸ðµ¨ ±¸¼º
3. ¸ðµ¨ ÈÆ·Ã
4. ¸ðµ¨ Æò°¡ ¿¹Ãø

# 1. µ¥ÀÌÅÍ Àüó¸®
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

x = np.linspace(1, 10, 10)
y = x

# 2. ¸ðµ¨ ±¸¼º
model = Sequential()
model.add(Dense(10, input_dim=1, activation='linear'))
model.add(Dense(10, activation='linear'))
model.add(Dense(8, activation='linear'))
model.add(Dense(1))
 
# 3. ¸ðµ¨ ÈÆ·Ã
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(x, y, epochs=100, verbose=0)
 
# 4. ¸ðµ¨ Æò°¡ ¿¹Ãø
loss_met = model.evaluate(x, y, batch_size=1)
print(loss_met)
 
predict = model.predict(x)
print('y', y, ' predict: \n', predict)

# RMSE ±¸Çϱâ
from sklearn.metrics import mean_squared_error
def RMSE(y_test, y_predict):
    return np.sqrt(mean_squared_error(y_test, y_predict))
print('RMSE : ', RMSE(y, predict))

# R2 ±¸Çϱâ
from sklearn.metrics import r2_score
r2_predict = r2_score(y, predict)
print('R2 : ', r2_predict)

1. µ¥ÀÌÅÍ Àüó¸®

models, layers ¶óÀ̺귯¸®¿¡¼­ Sequential, Dense ¿ÀºêÁ§Æ®¸¦ ÀÓÆ÷Æ® ÇÑ´Ù.
numpyµµ ÀÓÆ÷Æ® ÇÑ´Ù.

numpy linspace¸¦ ÀÌ¿ëÇØ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÑ´Ù.

x = np.linspace(1, 10, 10)

2. ¸ðµ¨ ±¸¼º

model = Sequential()
model.add(Dense(10, input_dim=1, activation='linear'))
model.add(Dense(10, activation='linear'))
model.add(Dense(8, activation='linear'))
model.add(Dense(1))

activationÀ» 'relu'¿¡¼­ 'linear'·Î º¯°æÇÑ´Ù.

3. ¸ðµ¨ ÈÆ·Ã

model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(x, y, epochs=100, verbose=0)

Metrics¿¡¼­ 'accuracy'´Â ºÐ·ù(Classification)¸¦ ÃøÁ¤ÇÒ¶§ »ç¿ëµÈ´Ù. ¼±Çü Ç׸ñÀÇ ÃøÁ¤¿¡´Â ÀûÀýÇÏÁö ¾Ê´Ù.
¼±Çü Ç׸ñÀÇ ÃøÁ¤¿¡´Â Æò±Õ Àý´ë ¿ÀÂ÷(Mean Absolute Error, MAE)¸¦ »ç¿ëÇÑ´Ù.
ÀÌ´Â ½ÇÁ¦°ª°ú ¿¹Ãø°ª »çÀÌÀÇ Â÷À̸¦ ³ªÅ¸³½´Ù. °ªÀÌ ÀÛÀ»¼ö·Ï ÁÁ´Ù

4. ¸ðµ¨ Æò°¡ ¿¹Ãø

loss_met = model.evaluate(x, y, batch_size=1)
print(loss_met)
 
predict = model.predict(x)
print('y', y, ' predict: \n', predict)

°á°ú)
10/10 [==============================] - 0s 3ms/step - loss: 0.0059 - mae: 0.0659
[0.005890830419957638, 0.06592752039432526]
1/1 [==============================] - 0s 102ms/step
y [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] predict:
[[1.133759 ]
[2.1076424]
[3.081525 ]
[4.055408 ]
[5.0292907]
[6.0031734]
[6.977056 ]
[7.9509387]
[8.924823 ]
[9.8987055]]
RMSE : 0.07675180232757674
R2 : 0.9992859588896326

ÄÚµå º¯°æ½Ã loss, mae, RMSE, R2 °ªÀÇ º¯È­

¸ðµ¨±¸¼º¿¡¼­ Àº´ÐÃþÀÇ È°¼ºÈ­ ÇÔ¼ö¸¦ ÁöÁ¤ ¾ÈÇÒ¶§

# 2. ¸ðµ¨ ±¸¼º
model = Sequential()
model.add(Dense(10, input_dim=1, activation='linear'))
model.add(Dense(10))
model.add(Dense(8))
model.add(Dense(1))

loss: 0.0546 - mae: 0.1946
RMSE : 0.23361375790883107
R2 : 0.9933848014685714

¸ðµ¨±¸¼º¿¡¼­ È°¼ºÈ­ ÇÔ¼ö¸¦ 'relu'·Î º¯°æ½Ã
# 2. ¸ðµ¨ ±¸¼º
model = Sequential()
model.add(Dense(10, input_dim=1, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='relu'))

loss: 1.9510 - mae: 1.1420
RMSE : 1.396765792125497
R2 : 0.76352064508461
¸ðµ¨±¸¼º¿¡¼­ Àº´ÐÃþÀÇ 'relu' È°¼ºÈ­ ÇÔ¼ö¸¦ ÁöÁ¤ ¾ÈÇÒ¶§

# 2. ¸ðµ¨ ±¸¼º
model = Sequential()
model.add(Dense(10, input_dim=1, activation='relu'))
model.add(Dense(10))
model.add(Dense(8))
model.add(Dense(1))

loss: 0.1180 - mae: 0.2844
RMSE : 0.3434691711207668
R2 : 0.9857004761805592

ÈƷýà ¿¡Æ÷Å©¸¦ 1000À¸·Î ¿Ã¸±¶§
# 3. ¸ðµ¨ ÈÆ·Ã
......
model.fit(x, y, epochs=1000, verbose=0)

¿¡Æ÷Å©¸¦ 100¿¡¼­ 200À¸·Î ¿Ã¸®¸é È¿°ú°¡ Àִ°ÇÁö, ¾ø´Â°ÇÁö ¾Ö¸ÅÇß´Ù.
1000À¸·Î ¿Ã¸®¸é È®½ÇÇÏ°Ô È¿°ú°¡ ³ªÅ¸³µ´Ù.
Á¦ÀÏ ÁÁÀº ÄÉÀ̽ºÀÇ °á°úÀÌ´Ù.
loss: 3.0484e-09 - mae: 4.6343e-05
RMSE : 5.516639947601564e-05
R2 : 0.9999999996311113

Âü°í)
Metrics¿¡¼­ 'accuracy'´Â ºÐ·ù(Classification)¸¦ ÃøÁ¤ÇÒ¶§ »ç¿ëµÈ´Ù. ¼±Çü Ç׸ñÀÇ ÃøÁ¤¿¡´Â ÀûÀýÇÏÁö ¾Ê´Ù.
https://stackoverflow.com/questions/51181393/simple-linear-regression-using-keras

Keras Classification Metrics
https://machinelearningmastery.com/custom-metrics-deep-learning-keras-python/