본문 바로가기
728x90

Deep Learning (AI)/Pytorch skills3

[Pytorch] Set seed import torch import numpy as np import random import torch.backends.cudnn as cudnn def set_seed(num): torch.manual_seed(num) torch.cuda.manual_seed(num) torch.cuda.manual_seed_all(num) np.random.seed(num) cudnn.benchmark = False cudnn.deterministic = True random.seed(num) 2023. 11. 5.
[Pytorch] nn.Parameter()로 grad 확인하기 troch graph에서 특정 노드로 흘러오는 역전파 값을 확인하고 싶을 때 유용하게 사용할 수 있습니다. torch는 requiers_grad=True를 통해 연산된 텐서들을 autograd로 추적할 수 있지만, leaf node가 아닌 변수들의 gradient는 None으로 바뀌게 됩니다. 이러한 변수들의 gradient를 남기기 위해서 retain_grad()를 사용합니다. x_stage1로 전달되는 미분값의 확인을 위해 params를 더해줍니다. 더해주는 연산은 역전파가 동일하게 흐르므로, 전파되는 미분값의 크기를 대략적으로 파악할 수 있습니다. 이를 통해, 계수의 조절과 loss가 적절한지 등 실험설계의 방향성을 잡는데 좋습니다. 2023. 8. 6.
[Pytorch] Tensor 다차원 인덱싱 torch tensor를 다루다 보면 3차원 혹은 4차원 이상의 텐서를 다룰 때, 인덱싱의 어려움이 생길 때가 있습니다. 예를 들어, 4차원에서 각 batch마다 다른 channel의 특정 index만 추출하고 싶을 때가 그렇습니다. 아래 코드는 각 배치마다 다른 채널의 값들을 가져오는 예시입니다. import torch a = torch.randn(2,3,2,3) b,c,w,h = a.shape batch_index = list([i] for i in range(b)) # [[0],[1]] channel_index = [[0,0,0],[1,1,1]] # 각 배치마다 가져올 채널 지정 k = a[batch_index, channel_index] # 각 배치에 해당하는 각 채널들을 인덱싱하여 가져옴 a라는.. 2023. 7. 29.
728x90