가위바위보 이미지 분류를 진행하고 있다.
제일 처음 작성한 코드는 이 곳에서 확인가능하다.
accuracy가 trainset으로 학습할 때는 높게 나오는데 testset으로 할 때는 40%를 간신히 넘었다. 그래서 무작정 데이터를 늘려보기도 하고, feature를 줄이거나 늘려보기도 했지만 결과는 비슷했다.
loss: 1.9499 - accuracy: 0.4000
참고 사이트
이 블로그를 많이 참고했는데 완벽히는 아니지만 쉽게 설명되어 있어 나름 이해하기 쉽다.
CS231n - Image Classification에서 배웠던 것처럼 train, validation, test로 나눠보았다.
비율은 train : validation : test = 50 : 20 : 30
코드는 이 곳에서 확인 가능하다.
loss: 0.9489 - accuracy: 0.5787
100에 비하면 겨우 절반이지만, 그래도 40에서 57까지 올렸다!
위에 링크한 코드에서 아래 부분만 변경했다.(코드)
필터 수는 model.add(keras.layers.Conv2D(n_channel_1, (3,3), activation='relu', input_shape=(28,28,3)))
의 첫번째 인자이다.
넓은 범위에서 필터 수를 정할 때는 단위로 증가시키면서 관찰하는 것이 좋고, 어느 하나가 가장 좋은 정확도를 보이면 그 근처에서 +- 적절한 값을 이용해서 더 좋은 값을 찾아낸다.
# 기존
n_channel_1 = 15
n_channel_2 = 20
# 변경
n_channel_1 = 384
n_channel_2 = 128
loss: 0.9009 - accuracy: 0.6657
소소하지만 57에서 66까지 올려보았다.
학습 반복 횟수를 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
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을 해결하는 방법에 대한 공부를 해야겠다.
레이어 구조 측면에서 잘 이해가지 않아서 좀더 공부해봐야할 것 같다.
bias와 variance는 모델의 loss 또는 error를 의미하므로, 둘 다 작은 (a) 모델이 가장 좋은 모델
-> 모델의 학습이 train error의 최소가 아닌 test error가 최소가 되도록 해야 한다는 것
참고 : https://modulabs-biomedical.github.io/Bias_vs_Variance
https://kevinthegrey.tistory.com/141
공식문서
케라스는 모델을 학습시킬 때 fit
메소드를 사용한다.
https://tykimos.github.io/2017/03/25/Fit_Talk/