ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 시각화

     

    댓글

Designed by Tistory.