当前位置:   article > 正文

pytorch基础:tensor_sourcetensor.clone().detach()

sourcetensor.clone().detach()
  1. import os
  2. import cv2
  3. import torch
  4. if __name__ == "__main__":
  5. # 创建未初始化的矩阵
  6. x = torch.empty(5, 3)
  7. # 创建随机初始化矩阵
  8. x1 = torch.rand(5, 3)
  9. # 创建一个0填充的矩阵,数据类型为long
  10. # 注意 zeros 有s,类型参数为dtype 且是torch.long
  11. x2 = torch.zeros(5, 3, dtype=torch.long)
  12. # 创建并使用现有数据初始化
  13. x3 = torch.tensor([5.5, 3.3], requires_grad=True)
  14. print(x3)
  15. x4 = torch.tensor(x2)
  16. print(x4)
  17. # 不建议x4赋值方式,运行会提示
  18. # UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach()
  19. # or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
  20. x5 = x3.clone().detach() # clone会做一个当前计算图的copy,然后不影响主计算图
  21. print(x5)
  22. x5[1] = 1
  23. print(x3.grad, x5.grad)
  24. x6 = x3.detach()
  25. # 返回一个新的Variable,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个Variable永远不需要计算其梯度,不具有grad。
  26. # 即使之后重新将它的requires_grad置为true,它也不会具有梯度grad
  27. # 使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变。
  28. print(x6)
  29. x6[1] = 1
  30. print(x3.grad, x6.grad)
  31. print(x3, x6)
  32. # 根据现有张量创建张量,会重用输入张量的属性,除非设置新的值覆盖
  33. x7 = x1.new_ones(5, 4) # new_* 创建对象
  34. print(x7)
  35. x8 = torch.randn_like(x3)
  36. print(x8)
  37. # size
  38. x.size()
  39. # view
  40. x9 = torch.randn(4, 4)
  41. y = x9.view(16)
  42. z = x9.view(-1, 8) # size -1 从其他维度推断
  43. print(x.size(), y.size(), z.size())
  44. # .item()
  45. print(x1[0][0].item())
  46. # 转换为numpy
  47. y1 = x.numpy()
  48. print(y1)
  49. # numpy 转torch
  50. y2 = torch.from_numpy(y1)
  51. print(y2)
  52. # 所有的 Tensor 类型默认都是基于CPU, 使用.to 方法 可以将Tensor移动到任何设备中
  53. y2.to("cpu", torch.double) # ``.to`` 也会对变量的类型做更改

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/272326
推荐阅读
相关标签
  

闽ICP备14008679号