[Data Science] CNN - MNIST

less than 1 minute read

MNIST - Tensorflow 2.3 구현

이번시간에는 Tensorflow 2.3 버전을 이용하여 kaggle의 MNIST를 학습하여 예측을 해보도록 하겠습니다.

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

# Raw Data Loading
df = pd.read_csv('/content/drive/My Drive/MachineLearning/data/mnist/Digit_Recognizer_train.csv')
# display(df.iloc[:,1:])

# 결측치와 이상치는 없어요

# Data Splite
x_data_train, x_data_test, t_data_train, t_data_test =\
train_test_split(df.iloc[:,1:], df['label'], test_size=0.3, random_state=0)

x_scaler = MinMaxScaler()
x_scaler.fit(x_data_train)
x_data_train_norm = x_scaler.transform(x_data_train)
x_data_test_norm = x_scaler.transform(x_data_test)

model = Sequential()
model.add(Conv2D(filters = 32,
                 kernel_size=(3,3),
                 activation='relu',
                 input_shape=(28,28,1)))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(filters = 64,
                 kernel_size=(3,3),
                 activation='relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(filters = 64,
                 kernel_size=(3,3),
                 activation='relu'))

model.add(Flatten())
model.add(Dropout(rate=0.5))
model.add(Dense(units=256, activation='relu'))

model.add(Dense(units=10, activation='softmax'))

print(model.summary())

model.compile(optimizer = Adam(learning_rate=1e-3),
              loss='sparse_categorical_crossentropy',
              metrics=['sparse_categorical_accuracy'])

history = model.fit(x_data_train_norm.reshape(-1, 28, 28, 1), 
                    t_data_train, 
                    epochs=100,
                    batch_size=100,
                    verbose=1,
                    validation_split=0.3)

평가

model.evaluate(x_data_test_norm.reshape(-1,28,28,1),t_data_test)
print(history.history.keys())
plt.plot(history.history['sparse_categorical_accuracy'], color='r')
plt.plot(history.history['val_sparse_categorical_accuracy'], color='b')
plt.ylim(0.95,1.0)
plt.plot()

Leave a comment