参考:
- Pytorch张量(Tensor)复制
https://blog.csdn.net/winycg/article/details/100813519
深浅拷贝及脱离计算图
深拷贝浅拷贝区别:参考c++深浅拷贝。深拷贝会开辟内存,浅拷贝只拷贝指针不开辟内存(共享内存)。
脱离计算图:指的是不再存储梯度信息,梯度为0。
以上操作主要由.clone()
和.detach()
两个方法完成。
.clone()
clone()函数可以返回一个完全相同的tensor,新的tensor开辟新的内存,但是仍然留在计算图中。
.detach
detach()函数可以返回一个完全相同的tensor,新的tensor开辟与旧的tensor共享内存,新的tensor会脱离计算图,不会牵扯梯度计算。此外,一些原地操作(in-place, such as resize_ / resize_as_ / set_ / transpose_) 在两者任意一个执行都会引发错误。
将ndarray转为tensor并指定类型
别管warning,pytorch2.0说了保证所有API向后兼容。
import torch
import numpy as np
# 创建一个numpy ndarray
my_array = np.array([[1, 2, 3], [4, 5, 6]])
# 将ndarray转换为Tensor并更改类型
my_tensor = torch.tensor(my_array, dtype=torch.float32)
# 打印结果
print(my_tensor)