百度企业网站建设,市场调研报告,京东seo是什么意思,营销型企业网站建站之前我写过一篇文章#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别#xff0c;而这两者都是深拷贝的方法#xff0c;返回张量的同时#xff0c;会在内存中创建一个额外的数据副本#xff0c;与原数据不共享内存#xff0c;所以不受原数据改变的影响。
这里…之前我写过一篇文章比较了 torch.Tensor() 和 torch.tensor() 的区别而这两者都是深拷贝的方法返回张量的同时会在内存中创建一个额外的数据副本与原数据不共享内存所以不受原数据改变的影响。
这里介绍两种浅拷贝方法torch.as_tensor() 和 torch.from_numpy()同样还是从官方文档出发
torch.as_tensor() torch.from_numpy() 直接对比着来看最明显的torch.as_tensor() 接收三个参数data, dtypeNone, deviceNone而 torch.from_numpy() 只接收一个参数即 ndarray正如前者文档中提到的 如果 data 是具有相同 dtype 和 device 的 NumPy 数组一个 ndarray则使用 torch.from_numpy() 构造一个张量。 torch.from_numpy() 会根据输入的 ndarray 构造一个具有相同 dtype 与 device 的张量这个行为跟 torch.as_tensor() 只输入ndarray而 dtype 与 device 保持默认是一样的。从这个角度看可以说 torch.from_numpy() 是 torch.as_tensor() 的一个特例。它们都是浅拷贝这是因为张量tensor与数组ndarray存储共享相同的底层缓冲区改变其中一个的值都会是另一个的值也被改变。
但是torch.as_tensor() 显然适用性更广它既可以接收非 ndarray 的数据还能改变数据的 dtype 或 device但这两个东西一旦被改变了就会生成一个新的数据副本此时 torch.as_tensor() 的行为就变成深拷贝了。
需要注意的是Numpy 在 64 位机子上浮点数默认的数据类型是 float64而 Pytorch 默认的是 float32。所以为了确保转换后的数据类型是 float32以及兼顾适用性使用 torch.as_tensor() 都是更好的选择。