기존 Tensor를 복사하는 방법 중 하나.

Tensor.clone()

복사한 텐서를 새로운 메모리에 할당하는 deepcopy

Tensor.detach()

복사 대상 텐서와 메모리 공유

back-propagation을 위한 기울 계산 그래프에서 제외된다.

결국 Tensor 복사는 clone과 detach의 특성을 합쳐서 사용하는 방법이 가장 깔끔하다.

Tensor.clone().detach()

새로운 텐서를 메모리에 할당하고 기존 계산 그래프와 관계를 끊음

Tensor.detach().clone()

기울기가 계산되지 않는 텐서를 만들고 새로운 메모리에 할당

먼저 계산 그래프에서 떼어져 나왔으므로 이후의 clone operation이 트래킹되지 않기 때문에 조금 빠르다.

[참고] Pytroch 텐서 복사

Q. 각각 어떤 상황에서 해당 메서드를 사용하는지

제 경험 기준으로 detach를 더 자주 사용하여 관련 내용을 먼저 전달 드리자면 딥러닝 모델로 부터 받은 output 값 평가를 위해 특정 메트릭을 적용하여 사용되는 연산에 포함되지 않도록 하기 위해 사용합니다. 그리고 해당 값 그대로를 모니터링하기 위해 사용됩니다. clone의 경우에서는 딥러닝 모델 계산에서 분기를 만드는 경우에 같은 데이터가 서로 다른 layer로 들어갈 때 사용될 것 같고 이러한 구조의 가독성을 높이기 위해 사용해볼 수 있지 않을까 합니다.(by.호민조교님)

Q. Tensor.clone().detach()나 Tensor.detach().clone()도 자주 사용하는지

메모리 공유로 in_place 연산이 포함된다면 detach만 사용하면 의도한 코드가 실행되지 않을 수 있어 clone과 detach를 같이 사용하시는 것 같네요. 두 메서드를 같이 사용하는 것이 안정성이 더 높아 보이네요. 다만 메모리 사용면에서 본다면 detach만 사용하는 것이 더 효율적인 것 같습니다. 물론 이를 보장하려면 사용하는 연산들이 in plcae 방식인지 아닌지에 따라 사용 여부가 달라질 것 같습니다.(by.호민조교님)