위키북스의 PyTorch 를 활용한 머신러닝, 딥러닝 철저입문 (코이즈미 사토시) 을 따라하다가.
예제코드에 아래와 같이 torch.Tensor 를 autograd.Variable 로 형변환시키는 코드가 있었다. 책이 2018년 1월의 pytorch api 를 기준으로 하면서, 최신 버전과 api 사용에 사소한 차이가 있는 듯 하다.
for epoch in range(300):
# 계산 그래프 구성
train_x, train_y = Variable(train_x), Variable(train_y)
optimizer.zero_grad()
# ...
다른 튜토리얼에서는 필요가 없었기 때문에 의문을 가지고 있었는데, 역주를 보니 Variable 이 deprecated 예정이었다. 2020년 1월 현재 1.2.0 에서 별 이상없이 동작하는 것 같았으나 궁금해서 검색을 해 보았다.
아래 링크에 관련 설명이 좀 있고, 일부를 조금 번역해 본다.
https://pytorch.org/blog/pytorch-0_4_0-migration-guide/
MERGING `TENSOR` AND `VARIABLE` AND CLASSES : TENSOR 와 VARIABLE 합치기, 그리고 클래스들
torch.Tensor 와 torch.autograd.Variable 은 이제 같은 클래스이다. 더 정확히는, torch.Tensor 가 이제 과거의 Variable 처럼 히스토리 트래킹이 가능하다. Variable 래핑은 이전처럼 계속 동작하지만, torch.Tensor 객체를 반환한다. 이제 코드 여기저기 Variable 래핑이필요억다는 말이다.
...
When does `autograd` start tracking history now? : 그럼 `autograd` 가 언제 히스토리 추적을 시작하나?
`autograd`의 중추적 플래그였던 `requires_grad` 가 이제 `Tensor`의 어트리뷰트이다. 이전에 Variable 에 적용되던 동일한 룰이 적용된다. 즉, `requires_grad=True`로 주어졌다면 인풋텐서의 히스토리가 추적된다.
...
What about `.data`? : 그럼 `.data` 는 어떻게 하나?
이전에는 `.data` 로 Variable 밑에 있던 Tensor 를 가져왔었다. 합쳐진 이후에는 y = x.data 도 비슷한 의미를 갖는다. 즉, y 는 x 와 데이터를 공야하는 Tensor 이고, x의 계산 히스토리와는 관계가 없으며, requires_grad=False 가 된다.
하지만, `.data` 가 안전하지 않은 경우도 생긴다. `x.data` 의 어떤 변화도 `autograd` 를 통해 추적되지 않을 것이고, x 가 백워드 패쓰에 필요한 경우는 계산 그레디언트가 부정확할 것이다. 더 안전한 방법은 x.detach() 를 사용하여, requires_grad=False 인 데이터를 공유고, autograd 로 in-place 변경도 리포트 받을 수 있는 텐서를 반환받아 사용하는 것이다.
원 링크의 코드 참조하세요.
'프로그래밍 > AI:ML:DL' 카테고리의 다른 글
[YOLO] shape_optimizer failed: Invalid argument, remapper failed: Invalid argument, layout failed: Invalid argument (2) | 2020.04.01 |
---|---|
tensorflow 2.1 : Could not load dynamic library 'libnvinfer.so.6' (0) | 2020.03.18 |
[번역|Yolo|darknet] darknet 구현에 대한 비교 (ycombinator) (0) | 2019.12.06 |
[YOLO] qqwweee/keras-yolo3 관련 노트 (0) | 2019.12.06 |
[Yolo|번역] Yolo 에서 나오는 anchor box 개념에 대해 설명해 줄 수 있을까? (0) | 2019.12.02 |