선수지식 학습하기
이번 데이콘의 주제는 MNIST 데이터 속에서 숨겨진 숫자를 읽어내는 것입니다. 모델을 만들기에 앞서 공유되어있는 코드들을 따라가며 정보를 빠르게 얻어야겠다고 생각했습니다.
dacon.io/competitions/official/235626/codeshare/
여기에 공지를 포함해서 여섯 가지 코드가 구성되어 있고 찬찬히 하나하나 살펴보겠습니다. 후술되는 코드는 해당 글의 작성자에게 있습니다. 제 자신이 공부하기 위해서 기록하는 글이기도 합니다. 계속 업데이트 예정입니다.
컴퓨터 비전 학습 경진대회 베이스라인 CNN
원문주소: dacon.io/competitions/official/235626/codeshare/1555?page=1&dtype=recent&ptype=pub
Python import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
필요한 라이브러리를 import 해줍니다.
Load Data
train = pd.read_csv('data/train.csv')
test = pd.read_csv('data/test.csv')
train과 test를 찍어보면,
train data는 28x28 (784) pixel image set 이 2048개 있고, id, digit, letter의 column이 있습니다.
test data에는 digit이 숨겨져 있네요.
EDA(탐색적 데이터 분석)
idx = 318
img = train.loc[idx, '0':].values.reshape(28, 28).astype(int) #열에서 필요없는 것 빼고 인덱싱 28x28 ndarray
digit = train.loc[idx, 'digit']
letter = train.loc[idx, 'letter']
plt.title('Index: %i, Digit: %s, Letter: %s'%(idx, digit, letter))
plt.imshow(img) #그리기
plt.show()
인덱스 변수에 숫자를 할당하고 plt.imshow()로 그려봅니다.
B안에 4가 보입니다.
Train model
x_train = train.drop(['id', 'digit', 'letter'], axis=1).values
x_train = x_train.reshape(-1, 28, 28, 1)
x_train = x_train/255 #normalization
y = train['digit'] #x에는 이미지정보가, y에는 숫자가 들어감.
y_train = np.zeros((len(y), len(y.unique())))
for i, digit in enumerate(y):
y_train[i, digit] = 1
x_train 의 shape은 (2048,784)->(2048, 28, 28, 1) 이고 y_train의 shape은 (2048,10) 이 됩니다.
normalization을 수행해줍니다. (0과 1사이 값이 더 딥러닝이 잘되므로)
y에는 숨겨져 있는 숫자 정보인 digit을 넣고,
y_train을 enumerate를 이용해서 one-hot encoding을 해줍니다.
def create_cnn_model(x_train):
inputs = tf.keras.layers.Input(x_train.shape[1:])
bn = tf.keras.layers.BatchNormalization()(inputs)
conv = tf.keras.layers.Conv2D(128, kernel_size=5, strides=1, padding='same', activation='relu')(bn)
bn = tf.keras.layers.BatchNormalization()(conv)
conv = tf.keras.layers.Conv2D(128, kernel_size=2, strides=1, padding='same', activation='relu')(bn)
pool = tf.keras.layers.MaxPooling2D((2, 2))(conv)
bn = tf.keras.layers.BatchNormalization()(pool)
conv = tf.keras.layers.Conv2D(256, kernel_size=2, strides=1, padding='same', activation='relu')(bn)
bn = tf.keras.layers.BatchNormalization()(conv)
conv = tf.keras.layers.Conv2D(256, kernel_size=2, strides=1, padding='same', activation='relu')(bn)
pool = tf.keras.layers.MaxPooling2D((2, 2))(conv)
flatten = tf.keras.layers.Flatten()(pool)
bn = tf.keras.layers.BatchNormalization()(flatten)
dense = tf.keras.layers.Dense(1000, activation='relu')(bn)
bn = tf.keras.layers.BatchNormalization()(dense)
outputs = tf.keras.layers.Dense(10, activation='softmax')(bn)
model = tf.keras.models.Model(inputs=inputs, outputs=outputs)
return model
CNN 모델을 만듭니다.
tf.keras.layers.Input에 (28,28,1)을 넣어줍니다.
BatchNoramlization을 이용해서 Normalization 과 scaling.
conv2D
참고문헌
1. buomsoo-kim.github.io/keras/2018/04/22/Easy-deep-learning-with-Keras-4.md/
'Deep Learning' 카테고리의 다른 글
Hyper parameter Tuning (0) | 2020.09.13 |
---|---|
Pandas 기초 2: Indexing & Slicing (3) | 2020.09.01 |
Pandas 기초 1: Series와 DataFrame 다루기 (2) | 2020.09.01 |
Metrics (0) | 2020.08.31 |
[데이콘]Dataset 받아오기 (1) | 2020.08.26 |
CNN(Convolutional Neural Network) (0) | 2020.08.25 |
[데이콘]컴퓨터 비전 학습 경진대회에 참가 결정 (0) | 2020.08.23 |
Normalization, Standardization, Initialization, optimization (1) | 2020.08.18 |