본문 바로가기
머신러닝딥러닝/딥러닝

[딥러닝] 인공신경망 패션아이템 분류 - 혼자공부하는 딥러닝

by orangecode 2022. 11. 30.
728x90

패션 MNIST

머신러닝/딥러닝을 배울 때 많이 사용되는 데이터 셋으로 보통 0~9로 숫자로 이루어진 MNIST가 가장 유명하다. 패션 MNIST는  MNIST와 개수가 동일하지만 패션아이템으로 이루어진 데이터가 패션 MNIST이다.

 

tensorflow / keras

Tensorflow는 구글이 2015년 11월에 오픈소스로 공개한 딥러닝 라이브러리이다. 이때를 기점으로 딥러닝에 대한 관심이 높아지고 2016년 3월 알파고가 이세돌 9단을 이겨 대중에 알려지며 인기가 폭발적으로 상승하였다.

 

 Tensorflow는 발전을 계속하면서 2019년 2.0버전이 릴리스되었으며, 혼공머신은 2.x버전을 사용합니다.

 

Keras는 Tensorflow의 고수준 API로 프랑소와 숄레가 만든 딥러닝 라이브러리이다. 

딥러닝 라이브러리의 특징은 GPU를 사용하여 인공신경망을 훈련한다는 점인데, GPU는 벡터와 행렬 연산에 매우 최적화 되어있기 때문에 곱셈과 덧셈을 많이 수행하는 인공신경망에 도움이 된다.

 

Keras는 직접 GPU연산을 수횅하진 않지만 GPU연산을 수행하는 다른 라이브러리를 백엔드로 사용한다. Keras API를 익히면 딥러닝 라이브러리를 다양하게 사용할 수 있다. 이를 위해 케라스에서는 직관적이고 사용하기 편한 고수준의 API를 제공한다.

 

 

딥러닝 - 인공신경망 패션아이템 분류
# 1. 라이브러리 설정
import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
# 2. 데이터 준비 및 확인
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()

fig, axs = plt.subplots(1, 10, figsize = (10,10))
for i in range(10):
    axs[i].imshow(train_input[i], cmap='gray_r')
    axs[i].axis('off')
plt.show()

# 10개 샘플 타겟값 설정하기
print([train_target[i] for i in range(10)])

# 3. 인공신경망 모델 만들기
from sklearn.model_selection import train_test_split
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size= 0.2, random_state = 42)

# 데이터셋 확인
print(train_scaled.shape, train_target.shape) 
print(val_scaled.shape, val_target.shape)

# 인공신경망 구축
dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
model = keras.Sequential(dense)

# 손실함수 설정(다중분류)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy') 
print(train_target[:20])

# 모델 훈련
model.fit(train_scaled, train_target, epochs=10)

# 모델 성능 평가
model.evaluate(val_scaled, val_target)

 

전체코드
# 1. 라이브러리 설정
import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np

# 2. 데이터 준비 및 확인
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()

fig, axs = plt.subplots(1, 10, figsize = (10,10))
for i in range(10):
    axs[i].imshow(train_input[i], cmap='gray_r')
    axs[i].axis('off')
plt.show()

# 10개 샘플 타겟값 설정하기
print([train_target[i] for i in range(10)])

# 3. 인공신경망 모델 만들기
from sklearn.model_selection import train_test_split
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size= 0.2, random_state = 42)

# 데이터셋 확인
print(train_scaled.shape, train_target.shape) 
print(val_scaled.shape, val_target.shape)

# 인공신경망 구축
dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
model = keras.Sequential(dense)

# 손실함수 설정(다중분류)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy') 
print(train_target[:20])

# 모델 훈련
model.fit(train_scaled, train_target, epochs=10)

# 모델 성능 평가
model.evaluate(val_scaled, val_target)
전체코드(함수 - 메인형)
# 1. import library
# tensorflow 가 keras를 가져와서 자동으로 keras 적용됨
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

import numpy as np

# 2. open fashion mnist dataset
def open_data():
    (train_input, train_target), (test_input, test_target) = tf.keras.datasets.fashion_mnist.load_data()
    # train data check
    print('train_input :', train_input.shape)
    print('train_target :',train_target.shape)

    # test data check
    print('test_input :',test_input.shape)
    print('test_target :',test_target.shape)    
    
    return (train_input, train_target), (test_input, test_target)


# 3. fashion mnist dataset check
def open_fashion(data):
    fig, axs = plt.subplots(1, 10, figsize=(10,10))
    for i in range(10):
        axs[i].imshow(data[i], cmap='gray_r')
        axs[i].axis('off')
    return plt.show()

# 4. logistic regression classification
# data normailization # 데이터 0~1사이 값으로 변경
def data_normailization():
    train_scaled = train_input / 255.0
    train_scaled = train_scaled.reshape(-1, 28*28)
    print(train_scaled.shape)
    return train_scaled

def neural_network():
    dense = tf.keras.layers.Dense(10, activation='softmax', input_shape=(784,))
    model = tf.keras.Sequential(dense)
    model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
    model.fit(train_scaled, train_target, epochs=10)
    model.evaluate(val_scaled, val_target)
    return model





## main
# open dataset
(train_input, train_target), (test_input, test_target) = open_data()

# fashion mnist dataset check
image_check = open_fashion(train_input)

# data normailization
train_scaled = data_normailization()

# train_test_split
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size= 0.2, random_state = 42)

# model build & train & evaluate
model = neural_network()
반응형

댓글