본문 바로가기
MACHINE | DEEP LEARNING/Deep Learning Project

[AI] 딥러닝 이미지 인식 _ 프래튼 라이브러리(Flatten Library), 소프트맥스(activation= 'softmax')

by 처카푸 2024. 4. 18.

함수 만드는 라이브러리

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

 

프래튼 라이브러리

from types import MethodWrapperType

 

모델을 만드는 함수를 만들때,

이미지의 가로 세로를 전부 일렬로 만들어 인풋레이어에 지정 해준다

- Flatten() 사용 : 이미지 인풋레이어의 갯수는 행*열 이다

- 일렬로 만들다보면 위치에 문제가 생길 수도 있다 그래서 모양대로 아키텍처를 만들기 위해 CNN(특징값 보존)을 개발했다

def build_model():
  model = Sequential()
  model.add(Flatten())
  model.add(Dense(128, 'relu'))
  model.add(Dense(10, 'softmax'))
  model.compile('adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  return model
# loss='sparse_categorical_crossentropy' 여러개로 분류해야 할 경우 사용한다

model = build_model()

 

Flatten 라이브러리 없이 평탄화 하는 방법

X_train.shape
# (60000, 28, 28)

# 28 * 28 = 784이므로 열을 reshape()을 사용해 784로 변환해준다
X_train = X_train.reshape(60000, 784)

# X_test의 값도 변환해준다
X_test = X_test.reshape(10000, 784)

# 데이터 타입을 변경한 후 모델링할때 입력 input_shape=(784, )
def build_model() :
  model = Sequential()
  model.add( Dense( units= 128, activation= 'relu', input_shape=(784, ) ) )
  model.add( Dense( 10, 'softmax' ) )
  model.compile( 'adam', loss= 'sparse_categorical_crossentropy', metrics= [ 'accuracy' ])
  return model

 

소프트맥스 softmax

: 여러개의 값 중에서 가장 큰 값을 선택하는 엑티베이션 소프트맥스

- 아웃풋 레이어에 activation= 'softmax'를 쓴다 

def build_model() :
  model = Sequential()
  model.add( Dense( units= 128, activation= 'relu', input_shape=(784, ) ) )
  model.add( Dense( 10, 'softmax' ) )
  model.compile( 'adam', loss= 'sparse_categorical_crossentropy', metrics= [ 'accuracy' ])
  return model

- 아웃풋 노드를 10개로 설정했기 때문에 y_pred 의 값이 10개가 나온다

  1개의 값만 출력될 수 있게 만드려면 결과값을 넘파이 함수 argmax()를 사용해서 원하는 곳의 인덱스나, 전체 인덱스를 얻을 수 있다

# 예측한 값을 y_pred 변수에 저장
y_pred = model.predict(X_test)

# 원하는 인덱스만 골라서 바꾸는 방법
y_pred[1].argmax()

# 전체 데이터 바꾸는 방법 |||| 일자로 읽으면서 최대값을 구하는 것이기때문에 axis=1로 설정한다
y_pred = y_pred.argmax(axis=1)