Deep Learning with Pytorch in a Nutshell
  • Content
  • Image recognition
  • Object detection
  • Semantic segmentation
  • GAN
  • Image style transfer
  • Face recognition
  • Interpretability
  • Word embedding
  • Pytorch
  • Optimization
  • Special layers
    • Transposed convolution
  • Neural architecture search
  • Reinforcement learning
    • Proof of Bellman equation
    • Tabular solution method
Powered by GitBook
On this page
  • Detach and clone
  • Retain graph
  • torch.gather

Pytorch

PreviousWord embeddingNextOptimization

Last updated 6 years ago

Detach and clone

  1. tensor.detach() creates a tensor that shares storage with tensor that does not require grad. tensor.clone()creates a copy of tensor that imitates the original tensor's requires_grad field. You should use detach() when attempting to remove a tensor from a computation graph, and cloneas a way to copy the tensor while still keeping the copy as a part of the computation graph it came from.

  2. tensor.data returns a new tensor that shares storage with tensor. However, it always has requires_grad=False (even if the original tensor had requires_grad=True

  3. You should try not to call tensor.data in 0.4.0. What are your use cases for tensor.data?

  4. tensor.clone() makes a copy of tensor. variable.clone() and variable.detach() in 0.3.1 act the same as tensor.clone() and tensor.detach() in 0.4.0.

Item

detach

clone

data

requires_grad

False

Same as origin tensor (??)

False

note

Not use in 0.4.0

Retain graph

torch.gather

torch.gath(input, dim, index, out=None) -> Tensor

Collect values along an axis specified by dim from input tensor

Example: dim=1, index is the column of values

a = torch.tensor([[1,2],[3,4]]) torch.gather(a, 1, torch.LongTensor([[1,1],[1,0]])) 2 2 4 3

Example: dim=1, index is the column of values

a = torch.tensor([[1,2],[3,4]]) torch.gather(a, 1, torch.LongTensor([[0,0],[0,0]])) 1 1 3 3

Example: dim=0, index is the row of values

a = torch.tensor([[1,2],[3,4]]) torch.gather(a, 0, torch.LongTensor([[0,0],[0,0]])) 1 2 1 2

https://discuss.pytorch.org/t/clone-and-detach-in-v0-4-0/16861\
https://discuss.pytorch.org/t/runtimeerror-trying-to-backward-through-the-graph-a-second-time-but-the-buffers-have-already-been-freed-specify-retain-graph-true-when-calling-backward-the-first-time/6795