-
少用
tensor.numpy()来查看tensor的np.ndarray格式数据,共享内存,修改torch.tensor对应的np.ndarray也会被改动 -
少用
torch.from_numpy()来生成torch.tensor,共享内存,修改原始np.ndarray,其生成的torch.tensor也会被修改 -
如果是希望防止跟踪历史(以及使用内存),可以将代码块放在
with torch.no_grad():内,这个做法在使用一个模型进行评估的时候非常有用,因为模型会包含一些带有requires_grad=True的训练参数,但实际上并不需要它们的梯度信息 -
torch.Tensor()是torch.FloatTensor()的别称,是一种数据类;而torch.tensor()是构造tensor的函数 -
数据有些更新步骤(如loss累计、weight更新等)应该用
tensor.data或tensor.item()(当且仅当tensor只包含一个scalar的时候可以用item()调用值)取出python number后计算,因为如果用tensor间的直接运算内存会加大,该操作会被放入计算图中-
item()比较适合在loss上使用total_loss += loss.item()
-
-
tensor.is_contiguous()返回tensor在存储中是否连续,并不是所有tensor都会以连续存储的方式被存在memory中。若tensor不是连续存储的,可以通过t = tensor.contiguous()来返回一个tensor的连续存储的copy-
为什么要有
tensor.is_contiguous()这个判断?- Pytorch中的有些操作并没有返回真实tensor的copy,而只是与原始tensor共享内存,用indices的形式来获取tensor中的元素,如
narrow(),view(),expand()andtranspose() - Pytorch提供
tensor.data_ptr()来返回tensor首元素的内存地址 - Python提供
tensor.storage()来返回tensor存储区地址
- Pytorch中的有些操作并没有返回真实tensor的copy,而只是与原始tensor共享内存,用indices的形式来获取tensor中的元素,如
-
讲一下
tensor.reshape()和tensor.view()的区别:张量操作中经常涉及如reshape、transpose(用于调换axis顺序)等操作,但是Pytorch对reshape操作提供了两种方法
tensor.view()和tensor.reshape()(Numpy也提供了reshape()和view()但是好像view()很少用,两者区别跟Pytorch里面比较相似)TensorFlow和Pytorch等深度学习的框架对数据都采用了tensor这个概念,大部分操作涉及reshape、transpose、elementwise乘法(Hadamard product)、某个axis的乘法,tensor的相关操作其实很多,可以参考TG Kolda的Tensor Decompositions and Applications
- 相同点是都能重新调整tensor的形状
view()有点类似数据库中的视图,并没有生成新的tensor数据,只是基于原始tensor的一种视图,与原始数据共享内存,修改view()生成的tensor也会对原始tensor内容进行修改- 差异:view只适合对满足连续性条件(contiguous)的tensor进行操作,而reshape同时还可以对不满足连续性条件的tensor进行操作,具有更好的鲁棒性。view能干的reshape都能干,如果view不能干就可以用reshape来处理。在满足tensor连续性条件时,
tensor.reshape返回的结果与tensor.view()相同,否则返回的结果与tensor.contiguous().view()相同,事先不能保证返回的是view()的结果还是copy后的结果(可以检查存储地址) - PyTorch:view() 与 reshape() 区别详解
- What’s the difference between reshape and view in pytorch?
Pytorch学习笔记-Basic Data Type基本数据类型
最新推荐文章于 2025-07-30 12:11:54 发布
本文详细介绍了PyTorch中处理Tensor时的一些最佳实践,包括避免直接使用`.numpy()`和`.from_numpy()`来转换数据,以及如何利用`with torch.no_grad():`防止构建计算图。此外,讨论了`torch.Tensor`与`torch.tensor()`的区别,以及何时使用`.data`和`.item()`来更新数据。还提到了`.is_contiguous()`和`.contiguous()`的作用,解释了`.reshape()`和`.view()`的区别,强调了在处理非连续Tensor时的注意事项。内容涵盖了内存优化和Tensor操作的要点,对于理解和提升PyTorch代码效率有很大帮助。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
PyTorch 2.5
PyTorch
Cuda
PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

1116

被折叠的 条评论
为什么被折叠?



