# It is recommended to use source Tensor.clone().detach() or sourceTensor.clone().detach().requires\_grad\_(True)

**URL:** <https://discuss.pytorch.org/t/it-is-recommended-to-use-source-tensor-clone-detach-or-sourcetensor-clone-detach-requires-grad-true/101218>\
**Category:** Uncategorized\
**Created:** [October 31, 2020, 10:24pm UTC](https://discuss.pytorch.org/t/it-is-recommended-to-use-source-tensor-clone-detach-or-sourcetensor-clone-detach-requires-grad-true/101218 "2020-10-31T22:24:21Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Anna\_yah](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/anna_yah/32/29661_2.png) [@Anna\_yah](https://discuss.pytorch.org/u/Anna_yah)\
**Post date:** [October 31, 2020, 10:24pm UTC](https://discuss.pytorch.org/t/it-is-recommended-to-use-source-tensor-clone-detach-or-sourcetensor-clone-detach-requires-grad-true/101218/1 "2020-10-31T22:24:21Z")

</div>

I changed `torch.tensor(x)` to `torch.tensor(x).clone().Detach() `but the problem is not solved.  
Do you know what I am doing wrong here?  
Thanks in advance!

```auto
for epoch in range(num_epochs): 
    outputs = []
    outputs = torch.tensor(outputs, requires_grad=True)
    outputs= outputs.clone().detach().cuda()
    for fold in range(0, len(training_data), 5): # we take 5 images 
        xtrain = training_data[fold : fold+5]
        xtrain = torch.tensor(xtrain, requires_grad=True).clone().detach().float().cuda() 
        xtrain = xtrain.view(5, 3, 120, 120, 120) 
        # Clear gradients
        #optimizer.zero_grad() 
        # Forward propagation
        optimizer.zero_grad() 
        v = model(xtrain)
        v = torch.tensor(v, requires_grad=True).clone().detach()
        outputs = torch.cat((outputs,v),dim=0)
        # Calculate softmax and ross entropy loss
    targets = torch.Tensor(targets).clone().detach()
    labels = targets.cuda()
    outputs = torch.tensor(outputs, requires_grad=True) 
    _, predicted = torch.max(outputs, 1) #prendre valeur maximale [0.96 0.04] ==> 0 (position de classe)
    accuracy = accuracyCalc(predicted, targets)
    labels = labels.long() 
    labels=labels.view(-1) 
    loss = nn.CrossEntropyLoss()
    loss = loss(outputs, labels)    
    # Calculating gradients
    loss.backward()
    # Update parameters
    optimizer.step()
    loss_list_train.append(loss.clone()) 
    accuracy_list_train.append(accuracy/100)
    np.save('Datasets/brats/accuracy_list_train.npy', np.array(accuracy_list_train))
    np.save('Datasets/brats/loss_list_train.npy', np.array(loss_list_train)) 
    print('Iteration: {}/{} Loss: {} Accuracy: {} %'.format(epoch+1, num_epochs, loss.clone(), accuracy))
print('Model training : Finished')

```

result :

```auto
UserWarning: To copy construct from a tensor, it is recommended to use source
Tensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True),
 rather than torch.tensor(sourceTensor)

```

---

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [November 1, 2020, 10:14am UTC](https://discuss.pytorch.org/t/it-is-recommended-to-use-source-tensor-clone-detach-or-sourcetensor-clone-detach-requires-grad-true/101218/2 "2020-11-01T10:14:47Z")

</div>

The warning points to wrapping a tensor in `torch.tensor`, which is not recommended.  
Instead of `torch.tensor(outputs)` use `outputs.clone().detach()` or the same with `.requires_grad_(True)`, if necessary.

---

<div class="post-metadata">

**Author:** ![Anna\_yah](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/anna_yah/32/29661_2.png) [@Anna\_yah](https://discuss.pytorch.org/u/Anna_yah)\
**Post date:** [November 1, 2020, 2:51pm UTC](https://discuss.pytorch.org/t/it-is-recommended-to-use-source-tensor-clone-detach-or-sourcetensor-clone-detach-requires-grad-true/101218/3 "2020-11-01T14:51:43Z")

</div>

Thank you so much @ptrblck
