가위바위보 이미지 분류

Nam Eun-Ji·2021년 1월 8일
0

EXPLORATION

목록 보기
1/4

문제

가위바위보 이미지 분류를 진행하고 있다.
제일 처음 작성한 코드는 이 곳에서 확인가능하다.
accuracy가 trainset으로 학습할 때는 높게 나오는데 testset으로 할 때는 40%를 간신히 넘었다. 그래서 무작정 데이터를 늘려보기도 하고, feature를 줄이거나 늘려보기도 했지만 결과는 비슷했다.

loss: 1.9499 - accuracy: 0.4000




과정

참고 사이트
이 블로그를 많이 참고했는데 완벽히는 아니지만 쉽게 설명되어 있어 나름 이해하기 쉽다.

1번째, 데이터 분리

CS231n - Image Classification에서 배웠던 것처럼 train, validation, test로 나눠보았다.
비율은 train : validation : test = 50 : 20 : 30
코드는 이 곳에서 확인 가능하다.

loss: 0.9489 - accuracy: 0.5787

100에 비하면 겨우 절반이지만, 그래도 40에서 57까지 올렸다!


2번째, 필터 수 증가

위에 링크한 코드에서 아래 부분만 변경했다.(코드)
필터 수는 model.add(keras.layers.Conv2D(n_channel_1, (3,3), activation='relu', input_shape=(28,28,3))) 의 첫번째 인자이다.

넓은 범위에서 필터 수를 정할 때는 2n2^n 단위로 증가시키면서 관찰하는 것이 좋고, 어느 하나가 가장 좋은 정확도를 보이면 그 근처에서 +- 적절한 값을 이용해서 더 좋은 값을 찾아낸다.

# 기존
n_channel_1 = 15
n_channel_2 = 20

# 변경
n_channel_1 = 384
n_channel_2 = 128
loss: 0.9009 - accuracy: 0.6657

소소하지만 57에서 66까지 올려보았다.


3번째, 학습

학습 반복 횟수를 10에서 20으로 올려보았다.

n_train_epoch = 20

model.fit(x_train, y_train, epochs=n_train_epoch, validation_data=(x_valid, y_valid), batch_size=100)
loss: 0.9335 - accuracy: 0.7131

4번째, BatchNormalization 추가

model.add(keras.layers.BatchNormalization())
loss: 0.6735 - accuracy: 0.7404
loss: 0.6903 - accuracy: 0.7333
loss: 0.7021 - accuracy: 0.7293
loss: 0.5781 - accuracy: 0.7788
loss: 0.5990 - accuracy: 0.7707

정확도 약 75.05으로 올랐고, loss도 낮아졌다.




해결이라고 하기엔...

해결이라고 하기엔 이 코드를 보면 찐개발자분들이 코웃음칠테지만...
그래도 과제 목표인 60프로는 넘었다.
최종 코드는 이 곳


아쉬운점

아직 데이터를 볼 수 있는 시각이 손톱의 때만큼도 안되니 단순히 정확도로만 판단한 것 같다.
데이터를 분석할 줄 아는 능력은 어떻게 길러야할까?
그리고 train data에서는 97-100프로까지의 정확도를 보이지만 아직도 test data에서는 75의 정확도만 보이고 있다. overfitting을 해결하는 방법에 대한 공부를 해야겠다.


궁금증

  1. Conv1d vs Conv2d
  2. Convolution층은 몇 개로 구성해야 좋은 걸까?
  3. 레이어의 순서는 어떻게 되어야 좋고 어떤 게 맞는 걸까?

레이어 구조 측면에서 잘 이해가지 않아서 좀더 공부해봐야할 것 같다.


참고했던 사이트

bias, variance

bias와 variance는 모델의 loss 또는 error를 의미하므로, 둘 다 작은 (a) 모델이 가장 좋은 모델
-> 모델의 학습이 train error의 최소가 아닌 test error가 최소가 되도록 해야 한다는 것

  • bias : 참 값들과 추정 값들의 차이(or 평균간의 거리)
  • variance : 추정 값들의 흩어진 정도

참고 : https://modulabs-biomedical.github.io/Bias_vs_Variance

Conv2D

https://kevinthegrey.tistory.com/141
공식문서

model.fit

케라스는 모델을 학습시킬 때 fit메소드를 사용한다.
https://tykimos.github.io/2017/03/25/Fit_Talk/

profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글