파이썬에서 이미지를 학습하기 위해서 먼저 이미지의 구조를 알아야 합니다.
파이썬에서 이미지는 가로 x 세로의 좌표값에 색상코드를 가지고 있게 됩니다. (0~ 255)
즉 이미지는 기본적으로 2차원 데이터라는 소리입니다.
그럼 이 이미지들의 데이터셋들(이미지가모여있으면)은 3차원 데이터가 됩니다.
가로 x 세로로 이미지가 표현되고 그 이미지들이 겹겹이 쌓여있어 높이를 형성했다 라고 생각하시면 됩니다.
텐서플로우에는 이러한 이미지를 가지고 테스트할 수 있도록 데이터가 들어있습니다.
import tensorflow as tf
# fashion_mnist 라는 라이브러리로 들어있습니다.
mnist=tf.keras.datasets.fashion_mnist
이 가져온 라이브러리에서 트레이닝과 테스트 셋을 가져옵니다.
(X_train, y_train),(X_test , y_test) = mnist.load_data()
그럼 X_train은 6만개 , X_test 는 1만개의 이미지 데이터가 저장되어 있습니다.
이를 pyplot 을 통해 나타내보면
import matplotlib.pyplot as plt
plt.imshow(X_train[0] , cmap='gray')
plt.show()
첫번째 데이터를 찍으면 이미지가 표시 될 것입니다.
이제 이 데이터들을 이용하여 예측을 하는 모델을 해보겠습니다.
먼저 y축을 간략하게 설명하면 10가지 옷의 분류 입니다.
X 축은 이미지데이터입니다.
# x값을 스케일링 하는 방법은 이미 0~255 범위이기 때문에 /255.0 으로 해줍니다.
X_train = X_train / 255.0
X_test = X_test / 255.0
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
# 모델생성
def build_model() :
model = Sequential()
model.add(Flatten() )
model.add(Dense(units=128 , activation = 'relu'))
model.add(Dense(units=64 , activation = 'relu'))
model.add(Dense(units=10 , activation = 'softmax'))
model.compile(optimizer='adam',loss = 'sparse_categorical_crossentropy',metrics=['accuracy'] )
return model
여기서 그동안과는 다르게 loss가 sparse_categorical_crossentropy 로 되어있습니다.
그동안은 2개의 분류만을 이용했기 때문에 binary_crossentropy 를 사용했습니다만
3개 이상부터는 예측하고자 하는 데이터를 보고 판단을 하셔야 합니다.
y값이 레이블 인코딩으로 되어있으면, sparse_categorical_crossentropy
y값이 원 핫 인코딩으로 되어있으면, categorical_crossentropy
이런식으로 지금은 y의값이 레이블 인코딩 형식이기 때문에 sparse_categorical_crossentropy 를 사용합니다.
또한 activation 은 softmax 로 되어 있습니다. 이는 10개의 항목으로 뷴류 한다는 것은 확률을 구하는 문제입니다.
따라서 모든 값들의 합은 1이 되어야하며 가장 높은 값이 분류되기때문에 softmax를 사용합니다.
'개발 > 머신러닝' 카테고리의 다른 글
파이썬 머신러닝 - flatten 라이브러리 대신 , validation_data 사용하는 방법 (0) | 2022.12.29 |
---|---|
파이썬 머신러닝 - softmax 로 처리한 결과값을 레이블인코딩, 오버피팅을 처리하는 콜백클래스 이용 (0) | 2022.12.29 |
파이썬 머신러닝 - learning rate 와 validation , earlystopping (1) | 2022.12.28 |
파이썬 머신러닝 - epochs history 로 차트 만들어 확인 (0) | 2022.12.28 |
파이썬 머신러닝 - 텐서플로우를 이용한 regression 문제 모델링 (0) | 2022.12.28 |