이미지를 사용하는 딥러닝에 경우 이미지 데이터는 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
반응형
'딥러닝' 카테고리의 다른 글
딥러닝(9) 텐서플로우의 콜백클래스를 이용해서, 원하는 조건이 되면 학습을 멈추게 하는 코드 (0) | 2022.12.29 |
---|---|
딥러닝(8)에포크, 학습데이터/벨리데이션데이터와 오버피팅 (0) | 2022.12.29 |
딥러닝(6) validation split (0) | 2022.12.29 |
딥러닝(5) 텐서플로우로 리그레션 문제 모델링 하는 방법 (0) | 2022.12.28 |
딥러닝(4) GridSearch 를 이용한, 최적의 하이퍼 파라미터 찾기 (0) | 2022.12.27 |