ANN(Artificial_Neural_Network)으로 텐서플로우 패션이미지API 를 활용해서 이미지를 분류하는 인공지능을 만들어보려고 한다.
1.필요한 프로젝트 import 해주기
먼저 넘파이, 텐서플로우, 그리고 텐서플로우의 케라스 모듈에서
fashion_mnist 데이터셋을 가져와서 사용할 수 있도록 준비
2. 데이터셋 로딩하기(학습 및 테스트)
fashion_mnist.load_data()
fashion_mnist.load_data()함수는 이미 훈련 및 테스트 데이터를 나누어 반환한다. 이 데이터는 훈련 이미지와 레이블, 그리고 테스트 이미지와 레이블로 구성되어 있다. 이것을 사용하여 모델을 훈련하고 테스트할 수 있다.
shape 에서(60000,28,28)은 28행 28열이 6만개가 있다는 뜻이다.
3. 이미지 정규화하기
이미지 정규화 하려면 원래는 피쳐 스케일링을 하는게 맞지만,이미지는 RGB 값 즉 0~255 사이의 숫자로 밖에 표현이 안되어 있기 때문에 255로 나누어주기만 하면 0~1 사이의 값으로 정규화가 된다
4. 신경망 모델 정의하기
model.add(Flatten()) :입력 이미지를 1차원 배열로 펼치는 Flatten 레이어 추가
model.add(Dense(128, activation='relu')): 첫번째 밀집층(Dense layer) 추가,은닉층에 128개의 뉴런을 설정하고, 'relu' 활성화 함수 사용
model.add(Dense(10, activation='softmax')):'softmax'는 각 클래스에 대한 확률을 출력하기 위해 사용됨
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']):
'adam' 옵티마이저 사용
'sparse_categorical_crossentropy' 손실 함수 사용 (다중 분류 문제에 적합)
평가 지표로는 'accuracy'를 사용하여 정확도를 측정
5. 모델 학습하기
- monitor='val_loss': 모니터링할 지표를 지정.여기서는 검증 데이터셋에 대한 손실을 모니터링.
- patience=10: 훈련 과정에서 검증 손실이 개선되지 않을 때 얼마나 기다릴지를 지정. 예를 들어, 검증 손실이 10번의 연속된 에포크 동안 개선되지 않으면 훈련이 중지.
- epochs=1000: 최대 훈련 에포크 수를 지정. 조기 종료가 활성화되어 있더라도 이 값보다 적은 횟수의 에포크로 훈련이 중지될 수 있음
- validation_split=0.2: 훈련 데이터의 일부를 검증 데이터로 사용할 비율을 지정. 이 비율만큼의 데이터는 모델이 훈련하는 동안 사용되지 않고, 검증 과정에서 모델의 성능을 평가하는 데 사용.
- callbacks=[early_stop]: 훈련 중에 사용할 콜백 함수 목록을 지정. 여기서는 조기 종료를 위한 EarlyStopping 콜백을 사용.
이렇게 설정하면 훈련 도중에 검증 손실이 더 이상 개선되지 않을 때 자동으로 훈련이 조기 종료
6.모델 평가 및 예측하기
먼저 평가이다
먼저 X_test,y_test 를 평가 했을 때, loss(오차율)은 0.3539 accuracy(정확도)는 0.8829 가 나왔다
그 다음 예측을 해볼 것인데 먼저,예측 해볼 이미지를 넘파이와 이미지로 가져와본다.
- X_test[0, :, :]: 테스트 데이터셋 중 첫 번째 이미지를 선택. 첫 번째 차원은 이미지 인덱스를 나타내며, 두 번째와 세 번째 차원은 이미지의 픽셀을 나타낸다. 따라서 X_test[0, :, :]는 첫 번째 이미지의 모든 행과 열을 선택한다.
plt.imshow(): X_test[0, :, :] 를 이미지로 불러왔을 때의 모습이며 cmap은 gray를 하면 회색의 픽셀로 가져온다.
y_pred= model.predict(X_test[ 0 , : , : ].reshape(1,28,28))
reshape를 해줌으로써 2차원 배열을 3차원으로 바꿔준다. 그 이유는 데이터를 받았을 때에도 3차원으로 받았기 때문에 예
측 데이터 또한 3차원으로 받아줘야한다.
y_test[0] 의 결과는 9가 나왔는데,Ankle boots로 잘 나왔는지 확인해 볼 필요가 있다
확인해 봤을 때 9로 서로 같으므로 잘 예측해준 것을 볼 수 있다.
7.Confusion Matrix 확인해보기
y_pred와 y_test의 Confusion Matrix 를 확인하려했지만 서로 비교하기 어려운 상태이다
y_pred.argmax(axis = 1)을 해주면 된다.
예측 확률 분포에서 가장 큰 값을 가진 클래스의 인덱스를 반환한다.
이렇게 함으로써 모델이 예측한 클래스를 실제 클래스 레이블과 비교하여 모델의 예측 정확도를 평가한다.
정확도를 확인했을 때 88% 정도가 나오는 것을 볼 수 있다.
'Deep Learning' 카테고리의 다른 글
[Deep Learning]딥러닝 CNN 활용하여 이미지 분류 정확도 높이기(Convolution,Pooling) (0) | 2024.04.19 |
---|---|
[Deep Learning]딥러닝의 Neural Networks and Deep Learning 흐름 (0) | 2024.04.16 |