인프런 커뮤니티 질문&답변

inflearncnn님의 프로필 이미지
inflearncnn

작성한 질문수

딥러닝 CNN 완벽 가이드 - Fundamental 편

선생님 안녕하세요 질문 좀 드려도 될까요?ㅠㅠ

작성

·

238

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
선생님 안녕하세요. 선생님 수업 머신러닝 완벽 가이드와 CNN fundamental편을 듣고 연구에 cnn모델을 적용하여 해보고 있는 대학원생입니다. 혹시 질문 좀 드려도 될까요?ㅠ
질문1. fold별로 loss를 찍어봤는데 다음과 같이 로스함수가 나옵니다. 1번 폴드에서 왜 이렇게 나오는 걸까요?
randomness고정도 하였습니다.
이 링크는 상세 코드입니다 https://github.com/jeguring/2022_neoantigen-prediction/blob/master/code/Untitled_1.py
batch_size
256
data
"HLA-A_10_random"
dataset_mode
"random"
erls_patience
30
fold_num
5
learning_rate
0.01
model
"efficientnet-HLA-A-10-short"
efficientnetb0모델에서 res값만 제 데이터에 맞게 바꿨습니다.
(width=1.0, depth=1.0, res=[276,10], dropout=0.2)
n_epoch
800
scheduler_gamma
(scheduler : stepLR
optimizer : Adam)
 
0.1
scheduler_step_size
10
 
 
질문2. 제 데이터의 경우 matrix가 276x10입니다.
그런데, efficientnet의 원래 coefficient는 다음과 같습니다.
# Coefficients: width,depth,res,dropout
'efficientnet-b0': (1.0, 1.0, 224, 0.2),
'efficientnet-b1': (1.0, 1.1, 240, 0.2),
'efficientnet-b2': (1.1, 1.2, 260, 0.3),
'efficientnet-b3': (1.2, 1.4, 300, 0.3),
'efficientnet-b4': (1.4, 1.8, 380, 0.4),
'efficientnet-b5': (1.6, 2.2, 456, 0.4),
'efficientnet-b6': (1.8, 2.6, 528, 0.5),
'efficientnet-b7': (2.0, 3.1, 600, 0.5),
'efficientnet-b8': (2.2, 3.6, 672, 0.5),
'efficientnet-l2': (4.3, 5.3, 800, 0.5),
 

제 데이터의 경우 276x10인데 기본 모델의 res값과 일치하는 게 없는데 이런 경우는 어떻게 해야 하나요?

일단 사용 중인 coefficient값은 efficientnetb0모델에서 res값만 제 데이터에 맞게 바꿨습니다.
(width=1.0, depth=1.0, res=[276,10], dropout=0.2)

 

답변 2

0

inflearncnn님의 프로필 이미지
inflearncnn
질문자

선생님 답변 정말 감사합니다!

가로길이와 세로길이는 제가 사용하고 있는 데이터가 이미지 데이터는 아니고 다른 데이터인데 CNN을 적용하고 있는 거여서 matrix의 각 요소들이 중요한 값들이라 변경하기가 힘듭니다ㅠ

padding같은 경우를 생각해보긴 했는데, 각 요소들 하나하나가 중요한 값들이라 임의로 값을 채워넣어도 될까 싶은 마음에 padding을 적용해보진 않았습니다.

 

지금 드는 생각은 두가지 정도가 생각이 드는데

1) 선생님께서 말씀해주신 대로 padding을 하여 ratio를 맞춰준다.

2) res는 여전히 res=[276,10]로 고려하고, width, depth, dropout 최적의 값들을 찾아낸다.

선생님 생각은 어떠신가요?

결국 둘 다 코드를 돌려보고 결과를 통해 보는 게 답일까요?

권 철민님의 프로필 이미지
권 철민
지식공유자

네, 둘다 코드를 돌려 보고 결과를 봐야 할 것 같습니다. 

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

1. 올려주신 캡처와 소스코드만 봐서는 1 fold에서 loss가 0.70이상으로 다른 fold보다 높은 이유를 잘 모르겠습니다. 

다만 전체 이미지 건수가 많지 않다면 fold에 따라서 편차가 생길 수는 있다고 생각됩니다. fold를 3으로 줄여서 테스트 해보시거나, 아님 kfold의 random_state를 변경하면서 다른 fold 세트를 만들어서 한번 테스트 해보시지요. 

2. 음, 가로 길이에 비해 세로 길이가 심하게 작군요. 

(width=1.0, depth=1.0, res=[276,10], dropout=0.2)

과 같이 res를 변경해 보셨으면 다른 방법도 한번 적용해 보시지요. res는 그대로 224로 유지 하시고 원본 이미지의 크기를 224x224로 만들되 이를 그대로 resize하면 ratio가 깨지는 이미지가 되므로 resize전에 padding으로 원본 이미지의 세로 영역을 넘는 세로 영역은 검은색 으로 채우신 후에 resize하시고 이를 이용하여 이미지를 다시 만들어 보시지요. 

아래와 같이 albumentations의 PadIfNeeded와 Resize를 결합해 보시면 될 것 같습니다. 원본 이미지에 아래 코드 적용해 보신 후에 학습을 시켜 보시면 어떨까 싶습니다. 

import albumentations as A
augmentor = A.Compose([
     A.PadIfNeeded(min_height=224, min_width=224, border_mode =cv2.BORDER_CONSTANT, value=[000],p=1.0),
     A.Resize(height=224, width=224, p=1.0)
])
aug_img = augmentor(image=org_image)['image']

 

inflearncnn님의 프로필 이미지
inflearncnn

작성한 질문수

질문하기