본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 딥러닝(CNN) 이미지 분석 + 하루끝(20240401)

728x90
반응형

input이 이미지가 될 수는 있으나 output이 이미지가 될 수는 없다(정형 데이터화되어 수치로 들어감).

딥러닝 구현으로 얻게 된 데이터 특성을 가지고 이미지를 찾아부는 검색 엔진까지 들어가야지 이미지가 출력된다.

 

 

1. KNN : 이미지를 비교할 때 픽셀 별 단순 차이만 가지고 거리를 계산한다. 어떤 픽셀이 보다 강조되어야 하는지 측정하기가 어려운 것이 단점이다.  (이미지 유사도가 높은 =  거리가 짧은)

 

2. KNN + PCA: 변동성이 가장 많은 픽셀에 초점을 맞춰(PCA), 높은 가중치를 부여한 픽셀을 조합하여 인공변수를 만들어 거리를 계산하는 것이 효과적이어서 이렇게 보완되어 발전하였다.

인근 픽셀 유사도를 찾아야 하는데 머신러닝이므로 flatten 할 수밖에 없다. 위-아래 구성된 픽셀이 flatten 되면서 멀리 떨어지게 되므로 신호가 멀어진다, 이미지 특성을 무시한 flatten 데이터를 학습하면 인근 픽셀의 유사도 측정이 어려운 것이 한계이다.

 

3. CNN: 인근 픽셀 가중치 보완

 

 

 

 

mnist 이미지 분석

 

1. 데이터 로딩

 

 

2. 변수 스케일링

minmax scaling 효과를 가짐 + 머신러닝 학습을 위한 2차원 형태 변환

 

 

3. 모델링

1) knn

 

 

2) knn + pca

 

 

3) ANN

0의 신호 따로, 1의 신호 따로, 2의 신호 따로...

0일 확률 1, 1의 확률 이렇게 봐야하므로 softmax를 사용하여야 함

그러므로 Y를 반드시 변환하여야 한다.

 

step 1) Y 변환

 

 

step 2) 모델링

 

 

step 3) compile 및 정지 규칙 생성

 

 

step 4) 베스트 모델 저장 (개선이 되면 저장)

 

 

step 5) 훈련

loss : 9.0802e-04, accuracy : 0.9946, val_loss: 0.0043, val_accuracy: 0.9749

 

 

step 6) 평가

 

 

step 7)  시각화

plt.plot(range(1, len(model_fit.history['loss'])+1), model_fit.history['loss'], c = 'r', label = 'train_loss') plt.plot(range(1, len(model_fit.history['val_loss'])+1), model_fit.history['val_loss'], c = 'b', label = 'val_loss')

 

 

 

신호가 복잡해질수록, 즉 클래스가 많아질수록 relu나 sigmoid를 쓰면 우리가 학습한 데이터셋과 다른 조합이 될 수도 있으므로 안전하게 하기 위해 softmax를 쓰는 것.

어떤 게 성능이 좋은 지는 테스트가 필요하다.

 

loss function 정의도 중요하지만 activation function 정의하는 것도 중요하다.

10개 클래스를 가지고 있는데 model.add(Dense(1, activation= 'relu')) 하면 안된다.

model.add(Dense(10, activation = 'relu')) 하여야 한다.

 

 

728x90

 

 

딥러닝 하려면 데이터 품질이 아주 중요하다.

결측치 대치 등의 검증들을 한 것은 데이터 품질을 높이기 위한 것이다. 

비정형은 정형보다 데이터 품질이 정말 좋지 않다.

 

데이터를 직접 수집하여 딥러닝 모델을 구현하겠다고 하는 것은 모든 그림을 다 같은 규격 사이즈로 만들어 놓아야 한다. 뒤집어진 그림도 rotation 하여야 한다.

 

 

 

step 8) 예측에 실패한 데이터 확인

 

 

 

cnn은 다음 시간에

728x90
반응형