Google Colab+Keras로 CNN 폭발 구축

소개



Google Colab과 Keras를 사용하여 CNN을 폭속으로 학습하는 방법을 소개합니다.

CNN(컨볼루션 신경망)은 화상 인식에 강하다. 기계 학습의 세계에서는 「우동이라고 하면 카가와」, 「이미지라고 하면 CNN」입니다.

이용하는 화상 데이터로서는 기업의 데이터를 사용하는 것에도 가지 않고, MNIST에서는 시시하다고 생각하기 때문에 여기에서는 CIFAR-10을 이용해 보기로 한다.

CIFAR-10이란?



약 8000만 장의 이미지가 있다.
  • 총 60000장
  • 이미지 크기는 32 픽셀 x32 픽셀
  • RGB 3 채널 컬러 이미지
  • 클래스 라벨은 airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck에서 10 클래스
  • 50000 매 (각 클래스 5000 매)의 훈련 이미지와 10000 매 (각 클래스 1000 매)의 테스트 이미지로 분할됩니다.

    읽는 법은 사이퍼텐 씨퍼텐 (참고 동영상: 80 Million Tiny Images )

    Google Colab이란?



    Google이 제공하는 수많은 서비스 중 Jupyter에서 GPU나 TPU를 무료로 사용할 수 있는 서비스이다.

    GPU에서 해 본 체감으로는 자신의 로컬 환경(MacbookPro2017, 13inch, 3.3GHz Intel Core i5, 메모리 16GB)과 비교해 약 100배 가까운 속도로 학습할 수 있다.

    만든 Notebook은 Google Drive에 저장된다. (Google Colab URL: htps //w w. 요츠베. 이 m/와 tch? v = XDq 진 MCqH8 )

    Keras란?



    TensorFlow를 감싸고 사용하기 쉬운 인식으로 좋다고 생각한다.
    백그라운드에서는 TensorFlow가 움직이고 있다.

    CIFAR-10 살펴보기



    우선 CIFAR-10에 어떤 이미지가 들어 있는지 보자.
    CIFAR-10 데이터 세트를 가져옵니다.
    from keras.datasets import cifar10
    (X_train, y_train), (X_test, y_test) = cifar10.load_data()
    

    훈련 데이터의 처음 30개를 묘사해 본다.
    import matplotlib.pyplot as plt
    
    # ラベルのリストを定義
    cifar10_labels = [
        'airplane',
        'automobile',
        'bird',
        'cat',
        'deer',
        'dog',
        'frog',
        'horse',
        'ship',
        'truck'
    ]
    
    # 描写
    for index, img in enumerate(X_train[:30]):
        plt.subplot(3, 10, index + 1)
        plt.imshow(img)
        plt.axis('off')
        plt.title(cifar10_labels[y_train[index][0]])
        plt.tight_layout()
    
    plt.show()
    

    htps : // 코 b. 레세아 rch. 오, ぇ. 코m/

    다양한 화상 데이터로 구성되는 것을 알 수 있었다.
    다음으로, 데이터를 전처리한다.

    데이터 전처리



    전처리로서 특징량의 정규화와 클래스 라벨의 one-hot-vector화를 실시한다.

    특징량 정규화



    이하의 코드로 정규화를 실시한다. (RGB는 0 ~ 255 범위이기 때문에)
    # 特徴量の正規化
    X_train = X_train.astype('float32')
    X_test = X_test.astype('float32')
    X_train /= 255.
    X_test /= 255.
    

    클래스 라벨의 one-hot-vector화



    클래스 라벨은 순서가 없기 때문에, one-hot-vector화해 둔다.
    from keras.utils import np_utils
    
    # クラスラベルのone-hot-vector化
    y_train = np_utils.to_categorical(y_train, 10)
    y_test = np_utils.to_categorical(y_test, 10)
    

    마지막으로 CNN 모델을 구축해 간다.

    CNN 구축



    레이어 구조는, (컨볼루션층×2+Max 풀링층+드롭아웃)×2+전 결합층으로서 이하와 같이 구축해 간다.
    # 必要なものをimport
    from keras.models import Sequential
    from keras.layers import Conv2D
    from keras.layers import MaxPool2D
    from keras.optimizers import Adam
    
    from keras.layers.core import Dense, Activation, Dropout, Flatten
    from tensorflow.python.keras.callbacks import TensorBoard
    
    # モデルを定義
    model=Sequential()
    
    # 層を追加していく
    model.add(Conv2D(32,(3,3),padding='same',input_shape=(32,32,3)))
    model.add(Activation('relu'))
    model.add(Conv2D(32,(3,3),padding='same'))
    model.add(Activation('relu'))
    model.add(MaxPool2D(pool_size=(2,2)))
    model.add(Dropout(0.25))
    
    model.add(Conv2D(64,(3,3),padding='same'))
    model.add(Activation('relu'))
    model.add(Conv2D(64,(3,3),padding='same'))
    model.add(Activation('relu'))
    model.add(MaxPool2D(pool_size=(2,2)))
    model.add(Dropout(0.25))
    
    model.add(Flatten()) # 平坦化
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(10,activation='softmax'))
    
    # コンパイル
    model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
    
    # TensorBoardで結果を見るためのインスタンス化
    tsb = TensorBoard(log_dir='./logs')
    
    # 学習
    history = model.fit(
        X_train,
        y_train,
        batch_size=32,
        epochs=20,
        validation_split=0.2,
        callbacks=[tsb]
    )
    

    TensorBoard에서 학습 결과를 확인하십시오.



    제대로 학습되어 있는지 TensorBoard를 사용하여 확인해 보겠습니다.
    $ tensorboard --logdir=./logs/
    

    에서 TensorBoard를 시작 localhost:6006 에 액세스.



    제대로 학습되어있는 것 같아 안심.

    여기서부터 하는 것으로는, 더욱 정밀도를 향상시키기 위해 파라미터나 레이어 구성을 바꾸어 보고 튜닝해 가는 작업에 들어간다.

    결론



    이번에는 Google Colab과 keras를 사용하여 GPU를 사용하여 CNN을 구축해 보았습니다.

    끝까지 읽어 주셔서 감사합니다!
  • 좋은 웹페이지 즐겨찾기