본문 바로가기

머신러닝공부

CIFAR-10 스트립트 예제

728x90
반응형

CIFAR-10

CIFAR-10의 데이터는 airplane, automobile, bird등의 10개의 정답으로 분류된 이미지이며, 딥러닝 학습을 위해 총 50,000개 학습데이터와 10,000개의 테스트 데이터로 이루어져 있음. 각각의 이미지는 32x32 크기의 작은 컬러 이미지.

 

[1] CIFAR-10 데이터 불러오기 및 정규화

import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPool2D
from tensorflow.keras.layers import Flatten, Dense, Dropout

(x_train, y_train), (x_test, y_test) = cifar10.load_data() # 데이터 불러오기
x_train = x_train,reshape(-1, 32, 32, 3) # 텐서로 변환 (높이, 너비, 채널)
x_test = x_test.reshape(-1, 32, 32 ,3) # 텐서로 변환 (높이, 너비, 채널)

print(x_train.shape, x_test.shape)
print(y_train.shape, y_test.shape)

x_train = x_train.astype(np.float32)/255.0 # 정규화
x_test = x_test.astype(np.float32)/255.0 # 정규화

[2] CNN 모델 구축

cnn = Sequential
cnn.add(Conv2D(input_shape(28, 28, 1), kernel_size=(3, 3), filters=32, activation='relu'))
cnn.add(Conv2D(kernel_size=(3, 3), filters=64, activation='relu'))
cnn.add(MaxPool2D(pool_size=(2, 2))
cnn.add(Dropout(0.25))

cnn.add(Flatten()) # 3차원 텐서를 1차원 벡터로 변환

cnn.add(Dense(128, activation='relu')) # 은닉층
cnn.add(Dropout(0.5))
cnn.add(Dense(10, activation='softmax')) # 출력층

[3] CNN 모델 컴파일 및 학습

cnn.compile(loss='sparse_categorical_crossentropy', optimizer=tf.keras.optimizer.Adam(), metrics=['accuracy'])
hist.cnn.fit(x_train, y_train, batch_size=128, epochs=30, validation_data=(x_test, y_test))

[4] 모델(정확도)평가

cnn.evaluate(x_test, y_test)

[5] 정확도 및 손실

import matplotlib.pyplot as plt

plt.plot(hist.history['accuracy'])
plt.plot(hist.history['val_accuracy'])
plt.title('Accuracy Trend')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(['train', 'validation'], loc = 'best')
plt.grid()
plt.show()

plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('Lostt Trend')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'validation'], loc='best')
plt.grid()
plt.show()
반응형