파이썬(Python)/머신러닝(Machine Learning)

[Python] 머신러닝 Keras MNIST, CIFAR10 데이터셋이란? 실습

끄적끄적아무거나 2023. 3. 13. 08:12
반응형

 

목차

     

     

     

     

     

     

    파이썬 Tensorflow의 MNIST 이란?

     

    앞서 포스트에서 데이터셋(Dataset)에 대해 알아보았습니다. MNIST는 텐서플로우(Tensorflow) 라이브러리에서 제공하는 데이터셋 입니다.

     

    출처: wiki

     

    위와 같은 손으로 쓴 듯한 숫자 정보를 MNIST에서 가지고 있습니다. 그래서 해당 데이터를 이용해서 머신러닝(Machine Learning) 사용자들은 학습을 통해 해당 숫자를 구분하는 연습을 할 수 있습니다. 

     

     

    그리고 MNIST는 Modified National Institute of Standards and Technology 의 약자로 해당 기관에서 이미지 프로세싱(Image Processing) 학습을 위해 데이터를 제공 합니다.

     

    위 그림과 같은 흑백의 경우 하나의 픽셀이 0~255의 값을 가지고 이를 통해 흰색과 검정색 사이를 표현 해줍니다. 

     

     

     

     

     

    파이썬 Tensorflow의 MNIST 데이터 확인 실습

     

    MNIST의 데이터를 확인해보겠습니다. 데이터 확인은 머신러닝에 적합한 주피터(Jyupyter)로 실습해보겠습니다.

     

     

     

    예제 코드 #1>>

    from tensorflow import keras
    import numpy as np
    import matplotlib.pyplot as plt

    1번 라인 : keras에서 MNIST를 가져오기 위해 라이브러리를 불러옵니다.

    2번 라인 : numpy 의 unique 함수 사용을 위해 불러옵니다.

    3번 라인 : 그림으로 표현하기 위해 matplotlib 라이브러리를 부릅니다.

     

     

    예제 코드 #2>>

    (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

    keras 서버에 저장된 데이터 셋을 가져 옵니다. 가져올 때 미리 train 용과 test 용을 분류해서 가져올 수 있습니다.

     

     

     

    예제 코드#3>

    x_train.shape

     

    결과>>

    (60000, 28, 28)

     

    x_train에 들어간 데이터의 행과 렬을 구합니다. 60000개의 샘플이 있고 28 x 28 픽셀 별로 0~255의 정보를 가집니다.

     

     

     

     

    예제 코드#4>>

    y_train.shape

     

    결과>>

    (60000,)

    타겟 값의 행과 열의 값을 가져 옵니다. 앞서 포스트에서 배웠듯이 타겟은 벡터(Vector) 형태로 출력 됩니다. 즉, 60000개 샘플(example)에 대한 분석 결과도 60000개가 되어야 합니다.

     

     

     

     

    예제 코드#5>>

    plt.imshow(x_train[59999], cmap='gray')

     

    결과>>

     

    총 60000개 샘플 중에 마지막 샘플을 불러와서 그림으로 출력합니다. 결과에서 알 수 있듯이 28x28픽셀(pixel)로 표현 됩니다.

     

     

    예제 코드#6>>

    def img_to_digit(data):
        for x in data:
            for y in x:
                print('%3s'%y, end=' ')
            print()
    img_to_digit(x_train[59999])

    img_to_digit이라는 함수를 만듭니다. 

    픽셀의 값을 0~255값으로 출력 해줍니다. 

     

    결과>>

     

     

     

     

     

     

    파이썬 Tensorflow의 CIFAR 10 데이터 확인 실습

     

    앞서 MNIST를 잘사용하셨다면 CIFAR10을 이용하는 것도 큰 문제가 없습니다. CIFAR는 컬러 이미지 입니다.

     

    출처: https://www.cs.toronto.edu/~kriz/cifar.html

     

    위 그림이 CIFAR10에서 제공하는 이미지 들입니다.

     

    컬러 이미지는 흑백에 하나의 차원이 더해진 데이터 입니다. RGB(Red, Green, Blue) 에서 각 각의 픽셀에 0~255의 값을 가지는 형태입니다. 

     

     

     

    예제 코드#1>>

    (x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()

    MNIST와 마찬가지로 keras에서 cifar10 데이터를 불러 옵니다. 컬러 이미지다 보니 다운받는데 시간이 조금 걸리니 참고 하시길 바랍니다.

     

     

     

    예제 코드#2>>

    x_train.shape

     

    결과>>

    (50000, 32, 32, 3)

    50000개의 샘플을 가지고 있고 32x32픽셀이고 3개의 색상(RGB)에 대해 값을 가지고 있습니다. 앞으로 처리를 위해 numpy의 transpose 함수를 사용해서 행렬의 위치를 변경해줍니다.

     

     

     

     

     

    예제 코드#3>>

    t_x_train = x_train.transpose((0,3,1,2))
    t_x_train.shape

     

    결과>>

    (50000, 3, 32, 32)

    3번째 항목 RGB의 위치를 두번째로 옮겼습니다.

     

     

     

     

    예제 코드#4>

    plt.figure(figsize=(3,3))
    plt.imshow(x_train[49999])

    이미지 크기를 3x3으로 맞추고49999번째 샘플 이미지를 출력 합니다.

     

    결과>>

     

     

     

     

    예제 코드#5>>

    img_to_digit(t_x_train[49999][2])

    49999번째 샘플 이미지의 Blue 의 픽셀 값을 출력 합니다.

     

     

    결과>>

    숫자가 작을 수록 빨간색이 많은 부분입니다. 

     

     

    반응형