작성
·
1.6K
0
안녕하세요 강사님.
1)
이전 강의에서 loss를 계산할 때는 batch 단위가 아닌 전체 데이터셋을 대상으로 해야한다라는 말씀을 하신 것으로 기억합니다. 그렇다면 validation loss, validation accuracy와 test loss, test accuracy를 구할 때 다음 코드에서는 batch 단위로 데이터를 처리하는데
단순히 batch 단위로 처리만 할 뿐 전체 validation dataset 또는 test dataset으로 loss와 accuracy를 계산하는 것인가요? 다시 말해서 10개의 data를 대상으로 loss를 구해야한다고 가정하면 저는 batch 단위가 아닌 10개의 데이터를 한꺼번에 받아서 loss와 accuracy를 구해야 한다고 생각했는데 2개의 데이터의 loss 합 먼저 구하고 또 2개의 데이터 loss 합 이런식으로 나눠서 계산된 loss합을 최종적으로 다 합쳐서 평균을 내주는 것인가요?
2)
파이썬 문법 적인 것인데요 제가 여태까지 학습했던 내용과 좀 달라 질문드립니다.
filepath에서 파일명을 문자열 포매팅하는 방법이 아래 방법과 가장 비슷한 것으로 생각되는데 {...} 앞에 f'{...}' 이런식으로 f를 붙여야 하지 않나요? 이 방법이 아닌 다른 문자열 포매팅 방법인가요?
항상 좋은 강의 감사합니다.
답변 1
0
안녕하십니까,
1. 음, 질문 항목들이 조금 헷갈려서 정리 부터 하고자 합니다.
먼저 test loss 라는 기능은 사용하지 않습니다. 일반적으로 loss는 학습 데이터를 기반으로 예측시 실제 데이터와의 차이를 loss 함수의 반환값으로 표현한 것입니다. 보통 test 데이터에는 test accuracy와 같이 성능 데이터를 측정합니다.
그리고 validation loss , validation accuracy(성능 측정)은 일반적으로 학습 시에 train 데이터와 함께 계산됩니다.
model.fit(x=train_img, y= train_label, ..... , validation_data=(val_img, val_label) 을 수행하면 학습을 하면서 train loss, train accuracy, 그리고 validation_data로 표현되는 데이터 세트를 이용하여 valid loss, valid accuracy 등을 batch 단위로 지속적으로 계산합니다.
그리고 model.evaluate()에 대해서 아래와 같이 질문하셨는데, 질문의 명확한 의미를 제가 이해하지 못했습니다.
"단순히 batch 단위로 처리만 할 뿐 전체 validation dataset 또는 test dataset으로 loss와 accuracy를 계산하는 것인가요?"
model.evaluate()는 test 데이터를 기반으로 성능을 측정할 때 사용됩니다.
전체 데이터를 train/valid/test 로 나누고, train과 valid 데이터는 학습시 사용합니다. train 데이터로 학습하고 valid 데이터로 학습시 overfitting이 되는지 검증하는 것입니다. test 데이터는 학습이 완료된 모델을 기반으로 inference를 수행하는데, model.evaluate()는 대량의 test 데이터에 대해서 model 성능을 확인해 보기 위해서 보통 수행합니다.
model.evaluate(test_img, test_label, batch_size=256) 와 같이 수행하면 test 데이터가 2560 장이라면 10번의 batch를 통해서 model 성능을 측정하게 됩니다.
2. f"{ }" 방식은 최신 버전의 python에서 도입된 방식이며 과거 부터 { 3d, .2f} 와 같은 formating을 사용해 왔습니다. 다만 {epoch:02d}와 같은 formatting은 keras 내부에서 해석되어서 checkpoint 파일명을 부여하게 됩니다.