딥러닝

딥러닝(7) flatten 라이브러리 사용하는 이유, 액티베이션함수 소프트맥스, 분류의 문제에서 loss셋팅

개발연습자1 2022. 12. 29. 12:00

이미지를 사용하는 딥러닝에 경우 이미지 데이터는 3차원으로 표현되기 때문에 flatten 라이브러리가

필요하다.특히 이미지는 숫자로 되어있다. 0부터 255까지의 숫자로 되어있다.

 

우선 데이터를 가져오자 데이터를 가져오는 방식은 기존 방식과 약간 다르다.

import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist

#텐서플로우에 fashion 데이터셋에서 가져온다.

mnist = tf.keras.datasets.fashion_mnist
(X_train, y_train),( X_test, y_test) = mnist.load_data()

X_train [0]

 

데이터가 하나의 이미지당 행렬을 띄고 있는것을 알수 있다. 숫자가 28개가 들어있는 행렬이다.

 

이 데이터를 학습하려면 먼저 이 데이터를 1차원으로 바꿔서 벽돌 쌓듯이 옆으로 한줄을 만들고

 

다시 그위에 한줄을 만들어서 최종적으로 (60000,28x28)의 데이터로 만들어야 학습 시킬수가 있는데

 

이작업을 하는것이 flatten 라이브러리 이다.

 

모델링 작업시 써주면 된다.

 

데이터를 불러올때 X,y데이터로 다 나눈 상태이기 때문에 모델링 작업으로 바로 들어가자

 

모델링 작업시 아웃풋 노드 부분에는 softmax  loss부분에 sparse_categorical_crossentropy를 써서 여러개를 분류하는 문제에 반응하도록 한다.

 

이렇게 하는 이유는 분류에 문제기 때문에 기존 결과에 다르게 여러개의 결과가 나오기 때문이다.

import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense

#Flatten 라이브러리 호출
from keras.layers import Flatten

def build_model():
  model = Sequential()
 # model에 Flatten함수 추가
  model.add( Flatten()  )
  model.add( Dense(128, 'relu') )
  model.add( Dense(64, 'relu') )
 #아웃풋 노드부분에는 softmax를 써준다.
  model.add( Dense(10, 'softmax'))
 # loss부분에 sparse_categorical_crossentropy를 써준다.
  model.compile('adam', 'sparse_categorical_crossentropy', ['accuracy'])
  return model
  
  model = build_model()
  
  model.fit(X_train, y_train, epochs = 5)

 

 

그럼 이제 데이터를 넣어 학습 시켜보자 구지 1차원으로 안바꿔도 Flatten이 바꿔준다.

#학습
model.fit(X_train, y_train, epochs = 5)

#평가
model.evaluate(X_test, y_test)

#예측
y_pred = model.predict(X_test)

 

여기서 100번째 값은 뭘로 분류했는지 알아본다. 나온 값이 행렬이기 때문에 argmax로 행렬의 최대값을 알아야 한다.

y_pred[100].argmax()

>>> 3

 

 

 

반응형