简要回答
PyTorch 张量(Tensor) 是框架的核心数据结构——广义上的多维数组,标量(0 维)、向量(1 维)、矩阵(2 维)都是其特例;
关键属性:
| 属性 | 含义 |
|---|---|
| .shape / .size() | 各维大小 |
| .dtype | float32、int64 等 |
| .device | cpu / cuda:0 |
| requires_grad | 是否参与 Autograd |
| .grad | 反向后的梯度 |
创建:torch.tensor()、torch.zeros()、torch.randn()
标准回答
PyTorch 张量(Tensor) 是框架的核心数据结构——广义上的多维数组,标量(0 维)、向量(1 维)、矩阵(2 维)都是其特例。
关键属性:
| 属性 | 含义 |
|---|---|
| .shape / .size() | 各维大小 |
| .dtype | float32、int64 等 |
| .device | cpu / cuda:0 |
| requires_grad | 是否参与 Autograd |
| .grad | 反向后的梯度 |
创建:torch.tensor()、torch.zeros()、torch.randn();从 NumPy:torch.from_numpy(arr)(共享内存)。
运算:重载 +、、@* 等,底层可 dispatch 到 CPU/GPU;广播机制与 NumPy 类似。
与神经网络:nn.Parameter 是特殊 Tensor;前向中张量在计算图上流动;loss.backward() 沿图回传梯度。
常见误区
⚠️ 常见踩坑
混淆 Tensor 与 Variable(0.4 后已合并);GPU 张量直接 .numpy() 报错需先 .cpu();inplace 操作破坏 Autograd 需小心。
追问
追问 1:torch.tensor 和 torch.from_numpy 区别?
题库专题:如何将 NumPy 数组转换为 PyTorch 张量?torch.from_numpy(arr) 与原 ndarray 共享内存(零拷贝),改一方会影响另一方,且保留 NumPy 的 dtype(如 float64);torch.tensor(data) 总是拷贝一份独立数据,可顺带指定 dtype、device、requires_grad。读大批数据想省内存用 from_numpy,需要独立副本或显式控制属性用 torch.tensor。
题库延伸:与本追问相关的专题题 → 如何将 NumPy 数组转换为 PyTorch 张量?
追问 2:view 和 reshape 有何注意?
view 要求张量内存连续(contiguous),只是改变 stride/形状的视图、不拷贝数据;若张量经过 transpose/permute 后不连续,view 会报错,需先 .contiguous()。reshape 更省心:能用视图时返回视图,不行则自动拷贝。两者都不能改变元素总数。性能敏感处优先 view 以避免隐式拷贝。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📰 AI 资讯
🛠️ AI 工具
- Pytorch
Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出
- Tensorflow
全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具