-
TensorFlow 기초 15 - 활성화 함수, 학습 조기 종료TensorFlow 2022. 12. 2. 11:19
# 활성화 함수, 학습 조기 종료 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from keras.datasets import boston_housing # print(boston_housing.load_data()) (x_train, y_train), (x_test, y_test) = boston_housing.load_data() print(x_train.shape, y_train.shape, x_test.shape, y_test.shape) # (404, 13) (404,) (102, 13) (102,) print(x_train[0]) print(y_train[0]) # 데이터 표준화 x_mean = x_train.mean(axis=0) x_std = x_train.std(axis=0) x_train -= x_mean x_train /= x_std x_test -= x_mean x_test /= x_std y_mean = y_train.mean(axis=0) y_std = y_train.std(axis=0) y_train -= y_mean y_train /= y_std y_test -= y_mean y_test /= y_std print(x_train[0]) print(y_train[0]) # model model = tf.keras.Sequential([ tf.keras.layers.Dense(units=52, activation='relu', input_shape=(13, )), tf.keras.layers.Dense(units=35, activation='relu'), tf.keras.layers.Dense(units=24, activation='relu'), tf.keras.layers.Dense(units=1) ]) model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.07), loss='mse', metrics=['mse']) model.summary() import math # 활성화 함수 비교 def sigmoid(x): return 1 / (1 + math.exp(-x)) x = np.arange(-5, 5, 0.01) sigmoid_x = [sigmoid(z) for z in x] tanh_x = [math.tanh(z) for z in x] relu = [0 if z<0 else z for z in x] plt.axhline(0, color='gray') plt.axvline(0, color='gray') plt.plot(x, sigmoid_x, 'b--', label='sigmoid') plt.plot(x, tanh_x, 'r--', label='tanh') plt.plot(x, relu, 'g--', label='relu') plt.show() history = model.fit(x_train, y_train, epochs=25, batch_size=32, validation_split=0.025) plt.plot(history.history['loss'], 'b-',label='loss') plt.plot(history.history['val_loss'], 'r-', label='loss') plt.xlabel('epochs') plt.legend() plt.show() print(model.evaluate(x_test, y_test)) # 주택가격(실제 , 예측) 시각화 pred_y = model.predict(x_test) plt.figure(figsize=(5,5)) plt.plot(y_test, pred_y, 'b.') plt.xlabel('y_test') plt.xlabel('pred_y') plt.show() print('-----------------------------') # 학습 조기 종료 # model model2 = tf.keras.Sequential([ tf.keras.layers.Dense(units=52, activation='relu', input_shape=(13, )), tf.keras.layers.Dense(units=35, activation='relu'), tf.keras.layers.Dense(units=24, activation='relu'), tf.keras.layers.Dense(units=1) ]) model2.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.07), loss='mse', metrics=['mse']) history = model2.fit(x_train, y_train, epochs=100, batch_size=1, validation_split=0.025, callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)]) plt.plot(history.history['loss'], 'b-',label='loss') plt.plot(history.history['val_loss'], 'r-', label='loss') # # val_loss: 0.6014 plt.xlabel('epochs') plt.legend() plt.show() print(model2.evaluate(x_test, y_test)) <console> (404, 13) (404,) (102, 13) (102,) [ 1.23247 0. 8.14 0. 0.538 6.142 91.7 3.9769 4. 307. 21. 396.9 18.72 ] 15.2 [-0.27224633 -0.48361547 -0.43576161 -0.25683275 -0.1652266 -0.1764426 0.81306188 0.1166983 -0.62624905 -0.59517003 1.14850044 0.44807713 0.8252202 ] -0.7821526033779157 2022-12-02 11:14:50.386347: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2 To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 52) 728 dense_1 (Dense) (None, 35) 1855 dense_2 (Dense) (None, 24) 864 dense_3 (Dense) (None, 1) 25 ================================================================= Total params: 3,472 Trainable params: 3,472 Non-trainable params: 0 _________________________________________________________________ Epoch 1/25 1/13 [=>............................] - ETA: 5s - loss: 0.8341 - mse: 0.8341 13/13 [==============================] - 1s 10ms/step - loss: 1.2738 - mse: 1.2738 - val_loss: 0.1571 - val_mse: 0.1571 Epoch 2/25 1/13 [=>............................] - ETA: 0s - loss: 0.7676 - mse: 0.7676 13/13 [==============================] - 0s 2ms/step - loss: 0.5072 - mse: 0.5072 - val_loss: 0.2402 - val_mse: 0.2402 Epoch 3/25 1/13 [=>............................] - ETA: 0s - loss: 0.2254 - mse: 0.2254 13/13 [==============================] - 0s 2ms/step - loss: 0.2911 - mse: 0.2911 - val_loss: 0.1136 - val_mse: 0.1136 Epoch 4/25 1/13 [=>............................] - ETA: 0s - loss: 0.1009 - mse: 0.1009 13/13 [==============================] - 0s 2ms/step - loss: 0.2225 - mse: 0.2225 - val_loss: 0.2866 - val_mse: 0.2866 Epoch 5/25 1/13 [=>............................] - ETA: 0s - loss: 0.2632 - mse: 0.2632 13/13 [==============================] - 0s 2ms/step - loss: 0.2044 - mse: 0.2044 - val_loss: 0.0801 - val_mse: 0.0801 Epoch 6/25 1/13 [=>............................] - ETA: 0s - loss: 0.1355 - mse: 0.1355 13/13 [==============================] - 0s 2ms/step - loss: 0.1432 - mse: 0.1432 - val_loss: 0.1430 - val_mse: 0.1430 Epoch 7/25 1/13 [=>............................] - ETA: 0s - loss: 0.0687 - mse: 0.0687 13/13 [==============================] - 0s 2ms/step - loss: 0.1580 - mse: 0.1580 - val_loss: 0.1139 - val_mse: 0.1139 Epoch 8/25 1/13 [=>............................] - ETA: 0s - loss: 0.0586 - mse: 0.0586 13/13 [==============================] - 0s 2ms/step - loss: 0.1256 - mse: 0.1256 - val_loss: 0.0988 - val_mse: 0.0988 Epoch 9/25 1/13 [=>............................] - ETA: 0s - loss: 0.1528 - mse: 0.1528 13/13 [==============================] - 0s 2ms/step - loss: 0.1257 - mse: 0.1257 - val_loss: 0.0562 - val_mse: 0.0562 Epoch 10/25 1/13 [=>............................] - ETA: 0s - loss: 0.0654 - mse: 0.0654 13/13 [==============================] - 0s 2ms/step - loss: 0.1171 - mse: 0.1171 - val_loss: 0.1176 - val_mse: 0.1176 Epoch 11/25 1/13 [=>............................] - ETA: 0s - loss: 0.0736 - mse: 0.0736 13/13 [==============================] - 0s 2ms/step - loss: 0.1272 - mse: 0.1272 - val_loss: 0.0375 - val_mse: 0.0375 Epoch 12/25 1/13 [=>............................] - ETA: 0s - loss: 0.0920 - mse: 0.0920 13/13 [==============================] - 0s 1ms/step - loss: 0.1483 - mse: 0.1483 - val_loss: 0.0853 - val_mse: 0.0853 Epoch 13/25 1/13 [=>............................] - ETA: 0s - loss: 0.1556 - mse: 0.1556 13/13 [==============================] - 0s 2ms/step - loss: 0.2038 - mse: 0.2038 - val_loss: 0.0445 - val_mse: 0.0445 Epoch 14/25 1/13 [=>............................] - ETA: 0s - loss: 0.1102 - mse: 0.1102 13/13 [==============================] - 0s 1ms/step - loss: 0.2279 - mse: 0.2279 - val_loss: 0.2642 - val_mse: 0.2642 Epoch 15/25 1/13 [=>............................] - ETA: 0s - loss: 0.1071 - mse: 0.1071 13/13 [==============================] - 0s 1ms/step - loss: 0.1664 - mse: 0.1664 - val_loss: 0.0774 - val_mse: 0.0774 Epoch 16/25 1/13 [=>............................] - ETA: 0s - loss: 0.0988 - mse: 0.0988 13/13 [==============================] - 0s 2ms/step - loss: 0.1426 - mse: 0.1426 - val_loss: 0.1932 - val_mse: 0.1932 Epoch 17/25 1/13 [=>............................] - ETA: 0s - loss: 0.1421 - mse: 0.1421 13/13 [==============================] - 0s 2ms/step - loss: 0.1368 - mse: 0.1368 - val_loss: 0.0712 - val_mse: 0.0712 Epoch 18/25 1/13 [=>............................] - ETA: 0s - loss: 0.0987 - mse: 0.0987 13/13 [==============================] - 0s 2ms/step - loss: 0.1091 - mse: 0.1091 - val_loss: 0.1485 - val_mse: 0.1485 Epoch 19/25 1/13 [=>............................] - ETA: 0s - loss: 0.0870 - mse: 0.0870 13/13 [==============================] - 0s 2ms/step - loss: 0.0922 - mse: 0.0922 - val_loss: 0.1834 - val_mse: 0.1834 Epoch 20/25 1/13 [=>............................] - ETA: 0s - loss: 0.1262 - mse: 0.1262 13/13 [==============================] - 0s 1ms/step - loss: 0.1139 - mse: 0.1139 - val_loss: 0.0713 - val_mse: 0.0713 Epoch 21/25 1/13 [=>............................] - ETA: 0s - loss: 0.1287 - mse: 0.1287 13/13 [==============================] - 0s 2ms/step - loss: 0.0926 - mse: 0.0926 - val_loss: 0.0499 - val_mse: 0.0499 Epoch 22/25 1/13 [=>............................] - ETA: 0s - loss: 0.0754 - mse: 0.0754 13/13 [==============================] - 0s 1ms/step - loss: 0.0870 - mse: 0.0870 - val_loss: 0.0787 - val_mse: 0.0787 Epoch 23/25 1/13 [=>............................] - ETA: 0s - loss: 0.0708 - mse: 0.0708 13/13 [==============================] - 0s 2ms/step - loss: 0.0751 - mse: 0.0751 - val_loss: 0.0928 - val_mse: 0.0928 Epoch 24/25 1/13 [=>............................] - ETA: 0s - loss: 0.0429 - mse: 0.0429 13/13 [==============================] - 0s 2ms/step - loss: 0.0817 - mse: 0.0817 - val_loss: 0.0422 - val_mse: 0.0422 Epoch 25/25 1/13 [=>............................] - ETA: 0s - loss: 0.0488 - mse: 0.0488 13/13 [==============================] - 0s 2ms/step - loss: 0.0739 - mse: 0.0739 - val_loss: 0.0539 - val_mse: 0.0539 1/4 [======>.......................] - ETA: 0s - loss: 0.1125 - mse: 0.1125 4/4 [==============================] - 0s 664us/step - loss: 0.2225 - mse: 0.2225 [0.2225160449743271, 0.2225160449743271] 1/4 [======>.......................] - ETA: 0s 4/4 [==============================] - 0s 665us/step ----------------------------- Epoch 1/100 1/393 [..............................] - ETA: 2:33 - loss: 0.1313 - mse: 0.1313 109/393 [=======>......................] - ETA: 0s - loss: 1.2960 - mse: 1.2960 217/393 [===============>..............] - ETA: 0s - loss: 1.2162 - mse: 1.2162 327/393 [=======================>......] - ETA: 0s - loss: 1.1653 - mse: 1.1653 393/393 [==============================] - 1s 687us/step - loss: 1.1334 - mse: 1.1334 - val_loss: 0.4813 - val_mse: 0.4813 Epoch 2/100 1/393 [..............................] - ETA: 0s - loss: 0.0245 - mse: 0.0245 123/393 [========>.....................] - ETA: 0s - loss: 1.0369 - mse: 1.0369 248/393 [=================>............] - ETA: 0s - loss: 1.0108 - mse: 1.0108 377/393 [===========================>..] - ETA: 0s - loss: 1.0774 - mse: 1.0774 393/393 [==============================] - 0s 442us/step - loss: 1.0535 - mse: 1.0535 - val_loss: 0.4742 - val_mse: 0.4742 Epoch 3/100 1/393 [..............................] - ETA: 0s - loss: 0.0682 - mse: 0.0682 126/393 [========>.....................] - ETA: 0s - loss: 1.0124 - mse: 1.0124 246/393 [=================>............] - ETA: 0s - loss: 0.9941 - mse: 0.9941 363/393 [==========================>...] - ETA: 0s - loss: 1.0575 - mse: 1.0575 393/393 [==============================] - 0s 458us/step - loss: 1.0592 - mse: 1.0592 - val_loss: 0.4379 - val_mse: 0.4379 Epoch 4/100 1/393 [..............................] - ETA: 0s - loss: 0.0988 - mse: 0.0988 114/393 [=======>......................] - ETA: 0s - loss: 1.2445 - mse: 1.2445 241/393 [=================>............] - ETA: 0s - loss: 1.1173 - mse: 1.1173 368/393 [===========================>..] - ETA: 0s - loss: 1.0398 - mse: 1.0398 393/393 [==============================] - 0s 445us/step - loss: 1.0462 - mse: 1.0462 - val_loss: 0.8275 - val_mse: 0.8275 Epoch 5/100 1/393 [..............................] - ETA: 0s - loss: 0.6620 - mse: 0.6620 127/393 [========>.....................] - ETA: 0s - loss: 1.0636 - mse: 1.0636 259/393 [==================>...........] - ETA: 0s - loss: 1.0258 - mse: 1.0258 391/393 [============================>.] - ETA: 0s - loss: 1.0440 - mse: 1.0440 393/393 [==============================] - 0s 426us/step - loss: 1.0418 - mse: 1.0418 - val_loss: 0.6161 - val_mse: 0.6161 Epoch 6/100 1/393 [..............................] - ETA: 0s - loss: 1.5824 - mse: 1.5824 130/393 [========>.....................] - ETA: 0s - loss: 0.9247 - mse: 0.9247 250/393 [==================>...........] - ETA: 0s - loss: 1.0311 - mse: 1.0311 368/393 [===========================>..] - ETA: 0s - loss: 1.0397 - mse: 1.0397 393/393 [==============================] - 0s 455us/step - loss: 1.0301 - mse: 1.0301 - val_loss: 0.4592 - val_mse: 0.4592 1/4 [======>.......................] - ETA: 0s - loss: 0.6706 - mse: 0.6706 4/4 [==============================] - 0s 665us/step - loss: 1.0588 - mse: 1.0588 [1.058756709098816, 1.058756709098816]
blue = sigmoid
red = tanh
gray = relu
val_loss와 loss를 시각화 주택가격(실제 , 예측) 시각화 loss와 val_loss 시각화 'TensorFlow' 카테고리의 다른 글