본문 바로가기

반응형

연구/pytorch

(24)
[pytorch] model 학습 중 nan이 뜨는 원인2 예전 포스팅 중 model 학습 중 nan 이 뜨는 원인에 대해서 포스팅한 적이 있다. 이는 너무 작은 숫자로 나누는 경우에 발생하는 경우를 다루었었다. [https://powerofsummary.tistory.com/165] 하지만 이번에는 그게 아닌데도 nan이 뜨는 경우를 발견했다. 결론부터 말하면 lr가 너무 크면 nan이 발생할 수 있다고 한다. 나는 어떤 실험을 위해서 lr=0.1 로 설정했었는데, 이게 원인이 된 것 같다. lr: 0.1->0.01 로 줄였더니 nan이 안뜨더라.
[pytorch] Loading pretrained weight 가 제대로 됐는지 확인하는 법 이미 이 블로그에는 pretrained weight 가 제대로 불렸는지 확인하는 예시코드를 올린적 있다. [https://powerofsummary.tistory.com/277] 하지만 기존에 올렸던 포스팅에서는 weights를 그대로 출력해서 그냥 눈으로 숫자들을 하나하나 확인해야만 하는 코드였다. 근데 그것마저도 너무 귀찮아서 그냥 쪼금 더 세련된 코드를 올려서 내가 나중에 다시 써먹으려고 한다. (매우 세련된 코드는 아님;) 2개의 code 를 추가해야하는데, 각각 pretrained weight 를 가져오는 코드의 앞 뒤에 붙여준다. 코드는 아래와 같다. # For checking loaded pretrained weight1 weight_dict = {} for i, (name, param) i..
[pytorch] Pretrained model의 일부 weights만 가져오기 Pretrained model과 fine-tuning 할 모델의 구조가 다음과 같이 생겼다고 가정한다. 여기서 pretrained model의 backbone weights만 가져와서 학습하고 싶다면 코드를 어떻게 짜야할까? 별로 어렵지는 않지만 매번 새로 짜기 귀찮아서 과거에 내가 짰던 코드를 올려두고 계속 참고하고자 한다. 우선 pretrained model의 checkpoints를 불러와서 어떻게 생겼는지 확인해본다. state_dict = torch.load(args.resume_checkpoint, map_location=cpu_device) print(state_dict.keys())결과화면 (['backbone.0.weight', 'backbone.1.weight&#39..
[Transformer] torch.nn.MultiheadAttention 모듈의 mask 인자 개념 이 글은 다소 오류가 있을 수 있으니 틀린 내용을 발견하셨다면 언제라도 피드백 환영합니다. nn.MultiheadAttention 의 forward 인자는 다음과 같다. forward(query, key, value, key_padding_mask=None, need_weights=True, attn_mask=None, average_attn_weights=True) 이 중에서 mask 가 2개 있다는 점이 코드 구현중에 헷갈리는 부분이었다. mask는 각각 key_padding_mask, attn_mask 가 있고 이 둘의 차이는 무엇일까? Transformer는 본래 이미지처리 분야가 아닌 자연어처리 분야에서 고안된 모듈이다. 하지만 자연어처리에서 입력은 이미지처럼 입력 사이즈가 고정되지 않고, 문장..
[npz] npz 데이터에서 keys 확인하기 dictionary 같은 경우에는 data.keys()로 안에 어떤 데이터들이 들어있는지 확인 가능하지만 npz data같은 경우에는 keys()로 확인이 안된다. 하지만 간단하게 다음의 명령어로 확인이 가능하다. data.files >> ['trans', 'gender', 'mocap_framerate', 'betas', 'dmpls', 'poses'] 출처) https://stackoverflow.com/questions/49219436/how-to-show-all-the-element-names-in-a-npz-file-without-having-to-load-the-compl
[model freeze] layer 의 일부만 freeze 하기 if config.model.use_param_regressor: print(f"freeze all parameters except ParamRegressor") for name, param in model.named_parameters(): if 'ParamRegressor' in name: # print(f"{name} requires_grad = True") pass else: param.requires_grad = False # print(f"{name} requires_grad = False")
[img 시각화] tensor로 변환된 이미지를 cv2.imshow 하기 1. tensor 로 변환된 이미지는 [C,H,W] 형태를 가지고 있으나 cv2.imshow 하려면 numpy형태로 바꾸어야한다. numpy 형태는 [H,W,C] 형태를 말한다. 2. 원본이미지가 numpy에서 tensor로 변환되는 과정에서 normalize도 하게되는데 이때 이미지를 시각화하기 위해서는 /255. 로 normalize 됐는지, transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 이 코드처럼 IMAGENET 형식으로 normalize 됐는지를 알아야한다. 알고나면 denormalize 작업을 다음과 같이 하면 된다. # /255. 로 normalize 된 경우 image = image * 255.0 # ..
[파이썬] 피클 pickle 파일 읽기, 쓰기 딥러닝 공부를 하며 코드들을 다루다 보면 피클 형식으로 저장되어 있는 데이터를 불러오거나 데이터를 피클 형식으로 저장해야 하는 경우가 더러 있다. 그렇다면 피클 pickle 이란 무엇일까? 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 파일로 저장하는 것을 말한다. 이 때 원하는 객체 자체를 바이너리로 저장해놓는 것이고 필요할 때 불러오기만 하면 되기 때문에 속도가 빠르다는 장점이 있다. 각설하고 피클 사용법은 아래와 같다. import pickle my_data = ['a','b','c'] ### 피클 파일로 저장할 때 ### with open("data.pickle","wb") as fw: pickle.dump(my_list, fw) ### 피클 파일 불러오기 ### with open("data.p..

반응형