Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 연구 시작
- 하체운동
- 티스토리챌린지
- 디버깅
- PT 운동
- github
- 덤벨운동
- 암풀다운
- 라섹 수술 후기
- 논문 리뷰
- 개인 PT
- Knowledge Tracing
- pytorch
- 코드
- 운동
- 바디프로필
- 코딩테스트
- 코테준비
- 건강
- 개인 운동
- 코테 공부
- 바프준비
- 다이어트
- 개인 피티
- 체스트프레스
- 개발자
- 프로그래머스
- 오블완
- 영화 비평
- 데드리프트
Archives
- Today
- Total
치즈의 AI 녹이기
How to Detach specific components in the loss? 본문
loss를 구할 때 detach()된 텐서가 어떻게 작용하는지 궁금해서 구글링 해봤다.
질문자는 다음과 같은 상황을 가정한다.
1. input x에 대하여 3개의 모델(A/ B/ C), 3개의 loss(L1 / L2 / L3)를 구한다.
modelA = nn.Linear(10, 10)
modelB = nn.Linear(10, 10)
modelC = nn.Linear(10, 10)
x = torch.randn(1, 10)
a = modelA(x)
b = modelB(a.detach())
b.mean().backward()
print(modelA.weight.grad) #1
print(modelB.weight.grad) #2
print(modelC.weight.grad) #3
c = modelC(a)
c.mean().backward()
print(modelA.weight.grad) #4
print(modelB.weight.grad) #5
print(modelC.weight.grad) #6
위 코드 예시에 따르면 결과는 다음과 같다.
#1. A는 학습되지 않는다.
#2. B는 학습된다.
#3. C는 학습되지 않는다.
#4. A는 학습된다.
#5. B는 학습되지 않는다.
#6. C는 학습된다.
나의 상황은 모델 A, B 둘 다 학습을 시키고 싶었는데, 대충 B(A(x)).detach()+A(x)가 되는 상황이었다.
modelA = nn.Linear(10, 10)
modelB = nn.Linear(10, 10)
modelC = nn.Linear(10, 10)
x = torch.randn(1, 10)
a = modelA(x)
b = modelB(a)
(b.detach()+a).mean().backward()
print(1, modelA.weight.grad) #1
print(2, modelB.weight.grad) #2
print(3, modelC.weight.grad) #3
즉, 다음과 같은 코드의 결과는
#1. A는 학습된다.
#2. B는 학습되지 않는다.
#3. C는 학습되지 않는다.
결국 이 지점에서 B가 학습이 안되고 있다는 문제를 찾았다.
참고 링크 : https://discuss.pytorch.org/t/how-to-detach-specific-components-in-the-loss/13983
'인공지능 대학원생의 생활 > 구글링' 카테고리의 다른 글
[pytorch] collate_fn에 arg 추가하기 (0) | 2022.04.08 |
---|---|
터미널에서 permission denied 해결하기 (0) | 2022.04.08 |
GAN 이해하기 (0) | 2022.03.22 |
Gumbel softmax vs Softmax with temperature (0) | 2022.03.03 |
[GIT] 다른 branch 간 비교 파일 목록 (0) | 2022.01.19 |