개발학습일지

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

AI/Deep Learning

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

처카푸 2024. 4. 18. 12:24

함수 만드는 라이브러리

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)