• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

왜 seed에 따라서 모델 결과값이 달라지는 것인가요?

21.07.09 21:23 작성 조회수 439

0

안녕하세요.

pytorch에 있는 imagenet.py 샘플 코드를 보고 있었는데, 궁금한 점이 있습니다

모델 훈련은 안하고, eval을 해서 샘플 이미지에 대해서 정확도를 계산해보려고 했습니다

제 생각에는 eval, no_grad이면 기본 가중치 값으로 이미지에 대해서 연산할 것 같은데, 파일을 실행할 때마다 달라지더라구요

그래서 --seed arg가 있어서 이를 실행했더니 아래 코드가 동작하는 것 같은데, 이때부터는 값이 고정되어서 나오는데

모델의 가중치 값이 고정되어 있는게 달라지는 것인가요? 아니면 어떤 변화 때문에 그런 것인지 혹시 아실까요? 감사합니다

답변 5

·

답변을 작성해보세요.

1

위 코드는 텐서를 CPU텐서로 할지 GPU 텐서로 할지 설정하는 부분이라 정확도에 대한 변화가 일어날 것 같진 않네요.

코드 리뷰를 하려면 전체적으로 보는게 맞는데 이 부분에 대해서는 수업 외 적인 부분이기 때문에 답변 드릴 수 없다는 것에 대해 먼저 양해 말씀 드립니다. ㅠㅠ

1

캡쳐 해주신 부분은 seed 활성화 부분만 있어서 저 것만 보고 판단할 수 없습니다. 다만 모델 가중치 값이 변할 수 있냐고 물어 보신 부분에 대해서 저장 된 모델 변수를 불러 올 단계에서는 항상 똑같다는 말씀을 드린 것이예요 :)

1

pretrained model이면 기존 모델 구조에 저장 된 파일로 부터 불러 온 가중치가 덮어 씌워지는 것이니까 항상 같은 값입니다. 다른 요인을 보셔야 할 것 같아요.

0

유영재님의 프로필

유영재

질문자

2021.07.12

먼저 답변 감사합니다

네 코드를 읽어봤을 때 변화할 수 있는 부분에 대해서 생각해봤는데, 아래 코드들이 매번 코드들을 실행할 때마다 바뀌게 할 수 있는지 궁금합니다

1. cudnn.benchmark = True

2.

if args.gpu is not None: 
  images = images.cuda(args.gpu, non_blocking=True)
if torch.cuda.is_available():
  target = target.cuda(args.gpu, non_blocking=True)

감사합니다

0

유영재님의 프로필

유영재

질문자

2021.07.10

안녕하세요. 답변 감사합니다

제가 테스트 했을 때 seed 옵션을 적용하고 안하고에서 이러한 점을 발견했는데 위에 적혀있는 코드로는 그러한 점이 발생할 수 없다고 말씀해주신건가요?