'''컨볼루션 신경망은 이미지 분류에 사용 된다 .'''
'''
Importing the libraries
'''
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import cifar10
'''
Data Preprocessing
Loading the Cifar10 dataset
'''
#Setting class names in the dataset
class_name = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']
#Loading Dataset
(X_train, y_train), (X_test,y_test) =cifar10.load_data()
#이미지 정규화
#모든 이미지의 픽셀 범위는 0~1
X_train = X_train /255.0
print(X_train.shape)
# (50000, 32, 32, 3) 4차원이다 .
#컬러 이미지이기 떄문 마지막 3은 RGB색을 의미 한다 .
#X 테스트 셋 255.0으로 나누기
X_test = X_test /255.0
#plt.imshow(X_test[10])
'''
Defining the Model
'''
model = tf.keras.models.Sequential()
#Adding the first Convolutional layer
'''
3x3 사이즈의 필터가 32개
filter :32
kernel_size : 3
padding : same
activation : relu
input_shape(32,32,3)
'''
model.add(tf.keras.layers.Conv2D(filters=32,kernel_size=3, padding='same',activation='relu',input_shape=[32,32,3]))
'''
맥스풀링 두번째 컨볼루션 레이어
필터를 이용해 스트라이딩을 할 때
맥스풀링은 오직 최댓값만 저장하는데 , 출력텐서의 크기를 줄이고 학습을 덜 복잡하게 한다.
정보는 계속 보관하므로 모델은 계속 학습을 진행한다 .
두번째 레이어 파라미터
filters : 32
kernel_size : 3
padding: same
activation : relu
MaxPool layer hyper-parameters:
pool_size : 2
strides : 2
padding : valid
'''
model.add(tf.keras.layers.Conv2D(filters=32,kernel_size=3,padding='same',activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding='valid'))
#Adding the third convolutional layer
'''
filters : 64
kernel_size : 3
padding : same
activation : relu
input_shape( 32,32,3)
'''
model.add(tf.keras.layers.Conv2D(filters=64,kernel_size=3,padding='same',activation='relu'))
'''네번째, 마지막 맥스 풀링 레이어 추가
filters: 64
kernel_size: 3
padding: same
activation : relu
MaxPool later hyper-parameters
pool_size : 2
strides: 2 -> 스트라이드는 Conv레이어의 인자,
이 파라미터를 사용하여 커널이 모든 방향으로 이동할 수 있는 픽셀의 수를 정의하고
입력 이미지를 분석할 수 있다 .
padding : valid
'''
model.add(tf.keras.layers.Conv2D(filters=64 , kernel_size=3,padding='same',activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2,padding='valid'))
#Adding flattening layer
model.add(tf.keras.layers.Flatten())
#Adding the first fully -connected layer
#Dense layer hyper-parameters
'''
units(neurons) : 128
activation : relu
'''
model.add(tf.keras.layers.Dense(units=128, activation='relu'))
#Adding the output layer
# Dense layer hyper-parameters
'''
units = 10
activation: softmax
'''
model.add(tf.keras.layers.Dense(units=10, activation='softmax'))
'''
Compiling the model
sparse_categorical_accuracy 다중 클래스 분류
두 개 이상의 클래스를 예측할때 사용하는 측정치
'''
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'])
#model.summary()
model.fit(X_train, y_train, epochs=5)
'''모델 평가'''
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print('정확도 {}'.format(test_accuracy))