작성
·
293
0
#Xception 모델 학습, 성능평가 및 예측 후 결과 분석하기
안녕하세요 선생님
선생님의 코딩을 토대로 실습연습을 하고 있는데 질문이 있습니다
1.검증 데이터 성적이 너무 높으면 이 부분은 과적합이라고도 볼 수 있을까요(test-score가 아니라도)? 아니면 데이터의 양이 그냥 너무 적어서 발생하는 것일까요? (early stop으로 16에서 멈추고 val score = 0.97이 나옵니다)
*데이터 크기: (5856, 2)
2.해당 자료가 0또는 1인데 (정상폐, 폐렴폐 ct)인데 loss =binary_crossentropy를 쓰면 될까요? (만약 categorical_crossentropy를 쓰면 문제가 발생하나요?)
3.만약에 데이터가 불균형하면 머신러닝에서 배웠던 것 처럼 -양성 데이터를 판별하는게 중요하다고 하면 metrics=['accuracy'] 이부분을 precision으로 할 수 있을까요? (반대로 음성이면 재현율)
*model.compile(optimizer=Adam(lr=initial_lr), loss='binary_crossentropy', metrics=['accuracy'])
4.선생님이 여기 실습에서 해당 데이터를 local? 영역에 넣으시고 분석하셔서 불러오는데 시간을 많이 줄인 것을 보았는데 바탕화면에 있는 데이터도 선생님이 하신 것 처럼 불러올 수 있을까요? 아니면 구글코랩처럼 따로 경로가 있을까요? (데이터를 불러오는데 1초이상이 걸립니다..)
감사합니다
답변 1
0
안녕하십니까,
일반적으로 과적합은 학습 데이터의 평가 지표가 검증 데이터의 평가 지표보다 월등하게 높을 경우를 지칭합니다. 검증 데이터의 평가 지표가 학습 데이터의 평가지표보다 높은 경우는 잘 발생하지 않지만, 해당 경우에는 검증 데이터 세트가 크지 않을 경우에 그럴 수 있습니다.
그리고 테스트 데이터의 평가 지표는 별로 인데, 학습 데이터의 평가지표도 높고 검증 데이터의 평가 지표도 테스트 데이터의 평가 지표보다 훨씬 높다면, 과적합이자, 검증 데이터의 데이터 세트가 매우 작거나 테스트 데이터보다 덜 일반적인 데이터 세트로 구성되어 있을 경우에 발생하기 쉽습니다.
해당 자료가 0또는 1인데 (정상폐, 폐렴폐 ct)인데 loss =binary_crossentropy를 쓰면 될까요? (만약 categorical_crossentropy를 쓰면 문제가 발생하나요?)
=> 네 loss= binary_crossentropy를 사용하면 됩니다. 만약에 categorical_crossentropy를 사용하고자 하신다면 label 값 0, 1을 one hot encoding 으로 변환해 줘야 합니다(강의 초반부쯤 말씀드리고 있습니다)
만약에 데이터가 불균형하면 머신러닝에서 배웠던 것 처럼 -양성 데이터를 판별하는게 중요하다고 하면 metrics=['accuracy'] 이부분을 precision으로 할 수 있을까요? (반대로 음성이면 재현율)
=> 네, precision 또는 recall을 적용할 수 있습니다. 다만 tensorflow가 upgrade되면서 metrics=['precision'] 과 같이 문자열이 아니라 아래와 같이 함수명으로 입력해 줘야 합니다.
import tensorflow as tf
model.compile(optimizer=Adam(lr=initial_lr), loss='binary_crossentropy', metrics=[tf.keras.metrics.Precision()])
재현율의 경우 tf.keras.metrics.Recall() 로 입력해 주시면 됩니다.
4.선생님이 여기 실습에서 해당 데이터를 local? 영역에 넣으시고 분석하셔서 불러오는데 시간을 많이 줄인 것을 보았는데 바탕화면에 있는 데이터도 선생님이 하신 것 처럼 불러올 수 있을까요? 아니면 구글코랩처럼 따로 경로가 있을까요? (데이터를 불러오는데 1초이상이 걸립니다..)
=> 음.. 질문을 잘 이해하지 못했습니다. 지금 실습 환경이 kaggle kernel 또는 구글 코랩 아닌가요? 아님 로컬 PC GPU 환경에서 작업하시는데 바탕화면에 있는 데이터를 못가져 오시는 건가요?
좀 더 자세히 실습하시는 환경과 질문 내용 기재 부탁드립니다.
감사합니다.
"https://www.kaggle.com/datasets/hgunraj/covidxct" -> 이 데이터를 add data가 아닌 선생님이 쓰신 방법처럼 주소를 입력하고 압축을 푸는 방법 (기존의 데이터가 너무 작아서 큰 데이터로 분석해보려고 합니다)
=> 강의에서는 별도의 URL에서 다운로드를 받습니다. 그러니까 Download를 받을 수 있는 디렉토리가 있고, 이걸 로컬로 !wget 명령어로 다운로드를 받으면 로컬 디렉토리에 다운로드가 됩니다.
그런데 https://www.kaggle.com/datasets/hgunraj/covidxct 는 너무 용량도 크고 별도로 다운로드 받을 수 있는 URL이 없을 겁니다. 이런 경우는 Kaggle의 로컬 디스크로 받을 수 없을 것 같습니다.
-평가지표에 관한 질문 - 선생님 제가 분류평가로 쓰는 데이터가 폐렴과 정상 폐인데 -> 폐렴의 데이터의 수가 정상 폐와 비교해서 2배이상 많은데 이럴 때 accuracy를 하니까 성능이 높게 나오는데 그냥 f1_score로 해도 될까요?
=> 음... 정해진 평가지표가 있지 않나요? competition이 아닌가요?
competition이 아니면 f1_score, precision, recall, roc_auc 중에 어떤 평가지표라도 사용해 보시면 될 것 같습니다(다 사용해 보셔도 됩니다). 심지어 2배 정도면 accuracy도 평가 지표로 사용되기에 크게 문제는 없을 것 같습니다
-데이터 학습을 완료하고 저장을 해서 따로 나중에 또 작업을 할때 학습없이 바로 불러오기는 어떻게 해야 하나요?
=> xception.save()하시고,
캐글 커널의 메뉴를 보시면 save version이 있을 겁니다. 거기서 advanced setting 누르시고 always save output 하시면 output 디렉토리에 저장이 될 겁니다.
안녕하세요 선생님 답변해주셔서 감사합니다 :)
4.선생님이 주신 실습데이터를 캐글에서 data add를 하지 않고 캐글 코드란에 홈페이지 주소를 적으시고 거기서 zip파일도 풀면서 데이터를 불러오는 시간이 더 빠르게 되는 것을 봤습니다.
그래서 이 부분을 캐글 홈페이지 내에서 어떻게 local 영역에다가 풀 수 있는지 궁금합니다..!
"https://www.kaggle.com/datasets/hgunraj/covidxct" -> 이 데이터를 add data가 아닌 선생님이 쓰신 방법처럼 주소를 입력하고 압축을 푸는 방법 (기존의 데이터가 너무 작아서 큰 데이터로 분석해보려고 합니다)
+추가질문
-평가지표에 관한 질문 - 선생님 제가 분류평가로 쓰는 데이터가 폐렴과 정상 폐인데 -> 폐렴의 데이터의 수가 정상 폐와 비교해서 2배이상 많은데 이럴 때 accuracy를 하니까 성능이 높게 나오는데 그냥 f1_score로 해도 될까요?
-만약에 데이터가 불균등해서 f1으로 했는데도 이렇게 성능이 높게 나오면 어떤 부분을 봐야할까요...?
+질문
-데이터 학습을 완료하고 저장을 해서 따로 나중에 또 작업을 할때 학습없이 바로 불러오기는 어떻게 해야 하나요?