I think @richard provided a nice explanationhere:

  
    
    
    Clone and detach in v0.4.0 
  
  
    We’ll provide a migration guide when 0.4.0 is officially released. Here are the answers to your questions: 


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 clone as a way to copy the tensor while still keeping the copy as a part of the computation graph it came from. …
  


Does this answer your question?