Data Science/Convolutional Neural Network(CNN)

4. Basic CNN Implementation(v2)

HJChung 2020. 3. 15. 18:31

 

 

 

 

 

2. CNN 학습 실습

  1. 모듈 불러오기
  2. 하이퍼 파라미터 정의
  3. CNN 구조 정의
  4. 데이터 불러오기
    • 데이터 : keras에서 제공하는 fashion_mnist
  5. 모델 생성
  6. 모델 학습
 

1. 모듈 불러오기

In [1]:
import tensorflow as tf
import numpy as np
 

2. 하이퍼 파라미터 정의

In [2]:
EPOCHS = 10
 

3. 네트워크 구조 정의 (CNN 구조 정의)

  • keras방식으로 해보겠다.

    • convolution(Conv2D)

      • padding : 'same'으로 하면 padding을 하여 크기 유지, 'valid'으로 하면 zero pading하지 않고 영상이 점점 줄어든다.
      • activation function : 'relu'
    • pooling(MaxPool2D) : 아무 설정도 하지 않으면 자동으로 stride:(2, 2)로 해준다.

    • full connection
      • Flatten
      • Dense
        • activation function으로 classification : 'relu', 'softmax'
In [1]:
from tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten, Dense
from tensorflow.keras.models import Sequential
In [4]:
def MyModel():
    return Sequential([Conv2D(32, (3, 3), padding = 'same', activation='relu'), #28*28*32
                MaxPool2D(),#14*14*32
                Conv2D(64, (3, 3), padding = 'same', activation = 'relu'),#14*14*64
                MaxPool2D(), #7*7*64
                Conv2D(128, (3, 3), padding = 'same', activation = 'relu'),#7*7*128
                                
                Flatten(),#7*7*128 => 6272
                Dense(128, activation= 'relu'), #6272 => 128, relu
                Dense(10, activation= 'softmax')  #128 ->10, softmax
                ]) #순서대로 우리가 사용할 layer을 다 넣어주면 된다.  
    
 

4. 데이터 불러오기, 전처리

In [5]:
#데이터 불러오기
fashion_mnist = tf.keras.datasets.fashion_mnist
In [6]:
#train, test set split
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

#흑백 영상은 각 픽셀이 0~1 사이의 실수로 된 2-D signal로 표현 할 수 있다. 
#이차원 신호와 흑백 이미지: 0~255 사이의 값을 0~1로 normalize
x_train, x_test = x_train / 255.0, x_test / 255.0

x_train = x_train.astype(np.float32)
x_test = x_test.astype(np.float32)
In [7]:
print(x_train.shape)#(x_train총 개수, heigt, width)
print(x_train[0].shape) #(height, width)

#근데 Cin(Cannel in)이 필요하니까 차원 하나를 추기해 주어야 한다. 
x_train = x_train[..., np.newaxis]
x_test = x_test[..., np.newaxis]
print(x_train.shape)
print(x_train[0].shape)
 
(60000, 28, 28)
(28, 28)
(60000, 28, 28, 1)
(28, 28, 1)
In [8]:
train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32).prefetch(2048)
test_ds =  tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32).prefetch(2048)
 

5. 모델 생성

In [9]:
model = MyModel()

model.compile(optimizer = 'adam', 
             loss = 'sparse_categorical_crossentropy', 
             metrics = ['accuracy'])
 

6. 모델 학습

In [10]:
model.fit(train_ds, validation_data = test_ds, epochs = EPOCHS)
 
Epoch 1/10
1875/1875 [==============================] - 111s 59ms/step - loss: 0.3828 - accuracy: 0.8621 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00
Epoch 2/10
1875/1875 [==============================] - 112s 60ms/step - loss: 0.2467 - accuracy: 0.9092 - val_loss: 0.2524 - val_accuracy: 0.9080
Epoch 3/10
1875/1875 [==============================] - 99s 53ms/step - loss: 0.2043 - accuracy: 0.9236 - val_loss: 0.2645 - val_accuracy: 0.9073
Epoch 4/10
1875/1875 [==============================] - 101s 54ms/step - loss: 0.1694 - accuracy: 0.9360 - val_loss: 0.2261 - val_accuracy: 0.9222
Epoch 5/10
1875/1875 [==============================] - 92s 49ms/step - loss: 0.1408 - accuracy: 0.9467 - val_loss: 0.2403 - val_accuracy: 0.9227
Epoch 6/10
1875/1875 [==============================] - 184s 98ms/step - loss: 0.1140 - accuracy: 0.9566 - val_loss: 0.2793 - val_accuracy: 0.9184
Epoch 7/10
1875/1875 [==============================] - 91s 48ms/step - loss: 0.0919 - accuracy: 0.9646 - val_loss: 0.2755 - val_accuracy: 0.9172
Epoch 8/10
1875/1875 [==============================] - 91s 49ms/step - loss: 0.0754 - accuracy: 0.9720 - val_loss: 0.3409 - val_accuracy: 0.9180
Epoch 9/10
1875/1875 [==============================] - 100s 53ms/step - loss: 0.0596 - accuracy: 0.9776 - val_loss: 0.3689 - val_accuracy: 0.9141
Epoch 10/10
1875/1875 [==============================] - 91s 49ms/step - loss: 0.0514 - accuracy: 0.9800 - val_loss: 0.3635 - val_accuracy: 0.9221
Out[10]:
<tensorflow.python.keras.callbacks.History at 0x659687cf8>
In [ ]:
 

'Data Science > Convolutional Neural Network(CNN)' 카테고리의 다른 글

6. Advanced CNN-2  (0) 2020.03.18
5. Advanced CNN-1  (0) 2020.03.18
4. Basic CNN Implementation(v1)  (0) 2020.03.15
3. Batch Normalization  (0) 2020.03.14
2. Basic CNN-2  (0) 2020.03.14