1. 이미지와 행렬
모든 이미지 사진은 픽셀당 숫자로 되어있습니다.
0~255까지 되어있고 0이 검정색, 255가 흰색입니다.
그 숫자의 데이터 타입은 Uint8(Unsigned int) 이라고 적습니다.
먼저 검정부터 회색 , 흰색으로만 되어있는데 그걸 그레이 스케일이라고 합니다. (gray image)
컬러 이미지는 RGB 3개를 사용하고, colored Image 라고 합니다.
컬러 이미지를 그레이 스케일로 바꿔서 사용합니다. (컴퓨터가 특징을 잘잡기 때문)
2. 인공지능 학습에 필요한 데이터 가져오기
밑에서 할 코딩은 https://github.com/zalandoresearch/fashion-mnist#labels 를 사용합니다.
import tensorflow as tf
print(tf.__version__) #텐서플로우 버전 출력
Tensorflow를 사용하기 앞서 Tensorflow를 import 해야 합니다.
Tensorflow 코드를 편하게 사용하기 위해 as tf를 붙임으로써 tf로 사용합니다.
tf.__version__를 입력해 버전을 확인할 수 있습니다.
mnist=tf.keras.datasets.fashion_mnist #Fashion MNIST 데이터는 tf.keras datasets API에 들어있습니다
(X_train,y_train),(X_test,y_test)=mnist.load_data() # 트레이닝과 테스트셋을 가져옵니다.
트레이닝용 과 테스트용 이미지 사이즈와 개수를 확인합니다.
X_train.shape #트레이닝용 28 * 28 짜리 행렬이 이미지 한개가 60000장이다
X_test.shape #테스트용 28 * 28 짜리 행렬이 이미지 한개가 10000장이다
이미지를 한번 보겠습니다.
import matplotlib.pyplot as plt #matplotlib가 분석하기 편하게 컬러처럼 보이게 해주는 기능을 지원합니다.
plt.imshow(X_train[0]) #X_train의 첫번째 이미지 보기 gary scale로 보고 싶을땐 파라미터 cmap='gray'를 추가 하시면 됩니다.
plt.show()
3. 학습이 잘 되도록 0과 1사이의 값으로 노말라이징(normalizing) 한다.
X_train = X_train/255.0
X_test = X_test/255.0
4. 이미지데이터를 전부 일렬로 만들어주는 Flatten 이용해서 모델링 한다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten
model = Sequential()
model.add(Flatten()) #이미지 사이즈 계산해서 인풋레이어를 만들어줍니다.
#히든레이어 1개
model.add(Dense(units=128,activation='relu'))
#아웃풋레이어는 10개를 분류하는 문제입니다.
#노드 10개를 세팅하고 activation에 softmax를 설정합니다.
model.add(Dense(units=10,activation='softmax'))
Sequential: SEQUENCE layers 로 모델링
Flatten: 2차원, 3차원을 1차원으로 만드는 것
Dense: 뉴런을 레이어에 붙인다.
각 레이어는 activation function 이 필요하다.
Relu effectively means "If X>0 return X, else return 0" -- so what it does it it only passes values 0 or greater to the next layer in the network.
Softmax 여러개의 값 중에서 가장 큰 값을 선택. [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05], 여기서 가장 큰 값을 1로 만들고 나머지는 0으로 만들어준다. [0,0,0,0,1,0,0,0,0]
5. 인공지능 트레이닝, 테스트
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(X_train,y_train,epochs=5) #훈련시킵니다. (epochs는 반복)
#accuacy는 약 90% 나올거고, 5epoch라 금방 끝납니다.
80%의 train 데이터 파일로 학습을 완료했습니다.
이제 20%의 데이터 파일로 테스트를 진행합니다.
model.evaluate(X_test,y_test)#인공지능 테스트하기
어떤것을 많이 틀렸는지 확인 합니다.
이런 것은 confusion_matrix 로 확인합니다.
from sklearn.metrics import confusion_matrix
y_pred=model.predict(X_test) #테스트한 것을 y_pred변수로 저장
y_pred[0].argmax() #첫번째 사진을 뭐라고 맞췄는지 확인
6. 테스트 결과 그래프로 보기
y_pred_labels = y_pred.argmax(axis=1)
cm = confusion_matrix(y_test,y_pred_labels)
import seaborn as sb
sb.heatmap(data = cm, annot=True,fmt='.0f',cmap='RdPu')
plt.show()
총 인공지능의 정답 확률을 확인합니다.
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_pred_labels)
'딥러닝' 카테고리의 다른 글
Image Data Generator 사람과 말 분류 (0) | 2022.03.29 |
---|---|
Convolutional Neural Networks (0) | 2022.03.29 |
ANN 인공신경망을 이용해 자동차 연비 예측하기 EarlyStopping 콜백(callback) 사용 (0) | 2022.03.29 |
Neural Networks (0) | 2022.03.29 |
딥러닝(tensorflow)을 이용한 자동차 구매 가격 예측 (0) | 2022.03.28 |