고양이 vs 강아지 3

박재형·2025년 4월 17일

이번 시간에는 저번 시간에 정확도가 낮았던 이유와, 해결하는 방법에 대해 포스팅하겠다.

일단, 저번 시간에 정확도가 낮았던 이유는 전처리에 있다고 했다.

전처리를 완벽히 하지 않은 상태로 모델을 학습시켰을 때, 이미지 데이터 값인 0~255는 딥러닝 모델이 학습하기에 비교적으로 비대한 숫자라 불안정하게 학습이 된다. 또한, 기울기 소실이나 폭주 등의 문제가 생겨 학습이 비효율적이게 된다.

더해서, overfitting이 일어나기 더 쉬울 수 있다.

그러면 이미지 데이터를 어떻게 압축시킬 수 있을까?

그냥 255.0으로 나누어주면 된다.

먼저, 데이터를 255.0으로 나누어주는 메소드를 정의하겠다.

def 전처리함수(i, 정답):
    i = tf.cast(i/255.0, tf.float32)
    return i, 정답

tf.cast()는 텐서의 자료형을 변환해주는데, 이 경우에는 i값을 255.0으로 나누고 float형태로 변환해준다.

이제 map()을 사용할건데, map()은 데이터셋에 함수를 적용해주는 메소드이다.

train_ds = train_ds.map(전처리함수) 
val_ds = val_ds.map(전처리함수)

이렇게 함수를 적용해주면 학습 데이터셋과 평가 데이터셋의 이미지 정보들이 0~1 사이로 압축된다.

이제 저번 시간에 했던 것처럼 데이터 값들을 출력해보면,

for i, 정답 in train_ds.take(1):
    print(i)
    print(정답)


이미지 데이터들이 0과 1사이의 값으로 압축된다.


(압축된 평가 데이터셋)

이제 모델을 실행해보자.

일단 첫번째 epoch에서, 저번 시간에는 그냥 찍어서 맞히는 수준인 50%대가 나왔던 반면 72%로 많이 향상됐고, 5번째 epoch 또한 10%가량 향상된 걸 알 수 있다.

다음 시간에는 학습한 모델을 파일로 저장하는 법에 대해 공부해보겠다.

0개의 댓글