Tensor类的成员函数dim()可以返回张量的维度,shape属性与成员函数size()返回张量的具体维度分量,如下代码定义了一个两行三列的张量:

  f = torch.randn(2, 3)

  print(f.dim())

  print(f.size())

  print(f.shape)

  输出结果:

  2

  torch.Size([2, 3])

  torch.Size([2, 3])

  dim=0的标量

  维度为0的Tensor为标量,标量一般用在Loss这种地方。如下代码定义了一个标量:

  import torch

  a = torch.tensor(1.6) # dimension为0就是标量了

  print(a, a.type())

  # 一些检验维度的方法

  print(a.dim())

  print(a.shape, a.size())

  print(len(a.shape), len(a.size()))

  输出结果:

  tensor(1.6000) torch.FloatTensor

  0

  torch.Size([]) torch.Size([])

  0 0

  定义标量的方式很简单,只要在tensor函数中传入一个标量初始化的值即可,注意是具体的数据。

  注意:

  Pytorch中的torch.tensor()是一个函数,函数的原形如下:

  torch.tensor(data, dtype=None, device=None, requires_grad=False)

  其中data可以是:list、tuple、NumPy ndarray、scalar和其他类型。torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor。

  而torch.Tensor()是Pytorch中的一个类,是默认张量类型torch.FloatTensor()的别名。

  Tensor与tensor的区别,具体可参考https://blog.csdn.net/tfcy694/article/details/85338745

  注意一点,torch.tensor()参数接收的是具体的数据,而torch.Tensor()参数既可以接收数据也可以接收维度分量也就是shape。

  dim=1的张量

  dim=1的Tensor一般用在Bais这种地方,或者神经网络线性层的输入Linear Input,例如MINST数据集的一张图片用shape=[784]的Tensor来表示。

  dim=1相当于只有一个维度,但是这个维度上可以有多个分量(就像一维数组一样),一维的张量实现方法有很多,下面是三种实现:

  import torch

  import numpy as np

  def printMsg(k):

  """输出Tensor的信息,维度,shape"""

  print(k, k.dim(), k.size(), k.shape)

  # 1.通过torch.tensor(), 参数传入一个list构造dim=1的Tensor

  a = torch.tensor([1.1])

  printMsg(a)

  b = torch.tensor([1.1, 2.2])

  printMsg(b)

  print("-" * 20)

  # 2.通过torch.Tensor(), 随机构造dim=1的Tensor

  # 这里传入的是shape=1,有1个元素

  c = torch.FloatTensor(1)

  printMsg(c)

  # 这里传入的是shape=2,有2个元素

  d = torch.FloatTensor(2)

  printMsg(d)

  print("-" * 20)

  # 3.从numpy构造dim=1的Tensor

  e = np.ones(2)

  print(e)

  e = torch.from_numpy(e)

  printMsg(e)

  输出结果:

  tensor([1.1000]) 1 torch.Size([1]) torch.Size([1])

  tensor([1.1000, 2.2000]) 1 torch.Size([2]) torch.Size([2])

  --------------------

  tensor([1.5056e-38]) 1 torch.Size([1]) torch.Size([1])

  tensor([0., 0.]) 1 torch.Size([2]) torch.Size([2])

  --------------------

  [1. 1.]

  tensor([1., 1.], dtype=torch.float64) 1 torch.Size([2]) torch.Size([2])

  dim=2的张量

  dim=2的张量一般用在带有batch的Linear Input,例如MNIST数据集的k张图片如果放再一个Tensor里,那么shape=[k,784]。

  如下示例:

  import torch

  # dim=2,shape=[2,3],随机生成Tensor

  a = torch.FloatTensor(2, 3)

  print(a.shape)

  print(a.shape[0])

  print(a.shape[1])

  print(a.size())

  print(a.size(0))

  print(a.size(1))

  输出结果:

  torch.Size([2, 3])

  2

  3

  torch.Size([2, 3])

  2

  3

  从上面可以看出,可以取到Tensor每一维度的分量 。

  dim=3的张量

  dim=3的张量很适合用于RNN和NLP,如20句话,每句话10个单词,每个单词用100个分量的向量表示,得到的Tensor就是shape=[20,10,100]。

  示例代码:

  import torch

  # dim=3,shape=[1,2,3],随机取0~1之间的数

  a = torch.rand(1, 2, 3)

  print(a)

  print(a.dim())

  print(a.shape)

  print(a.size())

  b = a[0] # 在第一个维度上取,得到的就是shape=[2,3]的dim=2的Tensor

  print(b.dim())

  print(b.shape)

  print(b.size())

  # 将torch.Size()转换为python列表的形式

  list(a.shape)

  输出结果:

  tensor([[[0.3503, 0.2163, 0.7880],

  [0.0933, 0.0372, 0.9077]]])

  3

  torch.Size([1, 2, 3])

  torch.Size([1, 2, 3])

  2

  torch.Size([2, 3])

  torch.Size([2, 3])

  [1, 2, 3]

  dim=4的张量

  dim=4的张量适合用于CNN表示图像,例如100张MNIST手写数据集的灰度图(通道数为1,如果是RGB图像通道数就是3),每张图高=28像素,宽=28像素,所以这个Tensor的shape=[100,1,28,28],也就是一个batch的数据维度:[batch_size,channel,height,width] 。

  如下构建一个shape=[2, 3, 28, 28]的Tensor:

  import torch

  a = torch.rand(2, 3, 28, 28)

  print(a)

  print(a.shape)

  输出结果:

  tensor([[[[0.0788, 0.1869, 0.2921, ..., 0.0653, 0.3229, 0.1024],

  [0.5636, 0.4804, 0.6982, ..., 0.3832, 0.9984, 0.5522],

  [0.5650, 0.8758, 0.2636, ..., 0.5024, 0.5592, 0.2962],

  ...,无锡看男科医院哪家好 https://yyk.familydoctor.com.cn/20612/

  [0.6311, 0.8914, 0.1481, ..., 0.9255, 0.4388, 0.6771],

  [0.1691, 0.6803, 0.0111, ..., 0.8962, 0.4907, 0.7369],

  [0.7360, 0.3643, 0.9757, ..., 0.6954, 0.5979, 0.2019]],

  [[0.1387, 0.1379, 0.7730, ..., 0.3476, 0.6346, 0.5387],

  [0.2940, 0.2296, 0.5864, ..., 0.0558, 0.4093, 0.4563],

  [0.1498, 0.1705, 0.4542, ..., 0.0370, 0.5867, 0.4178],

  ...,

  [0.6814, 0.3024, 0.8031, ..., 0.0425, 0.4695, 0.3253],

  [0.5721, 0.9202, 0.1709, ..., 0.7571, 0.6944, 0.7455],

  [0.4426, 0.3546, 0.9652, ..., 0.2672, 0.0161, 0.3755]],

  [[0.1455, 0.2020, 0.2242, ..., 0.5136, 0.5918, 0.9750],

  [0.1039, 0.1641, 0.1945, ..., 0.1314, 0.6887, 0.2439],

  [0.0275, 0.1987, 0.5682, ..., 0.0732, 0.7392, 0.8445],

  ...,

  [0.0180, 0.7265, 0.0541, ..., 0.0939, 0.4592, 0.7898],

  [0.2253, 0.2115, 0.6485, ..., 0.0314, 0.0185, 0.5788],

  [0.4660, 0.9765, 0.1458, ..., 0.3520, 0.7162, 0.4895]]],

  [[[0.3837, 0.1531, 0.9617, ..., 0.3220, 0.3959, 0.6391],

  [0.4072, 0.0711, 0.5841, ..., 0.9417, 0.5799, 0.9794],

  [0.0307, 0.1862, 0.0766, ..., 0.8336, 0.6978, 0.4468],

  ...,

  [0.8934, 0.0480, 0.9964, ..., 0.8817, 0.3746, 0.6780],

  [0.7201, 0.5030, 0.2582, ..., 0.9542, 0.8955, 0.0750],

  [0.5892, 0.8647, 0.3251, ..., 0.5489, 0.5575, 0.3004]],

  [[0.0630, 0.1473, 0.7858, ..., 0.3695, 0.2419, 0.4843],

  [0.7736, 0.6974, 0.8900, ..., 0.3137, 0.4747, 0.9298],

  [0.8021, 0.3490, 0.8568, ..., 0.5600, 0.2382, 0.0054],

  ...,

  [0.4725, 0.7952, 0.5935, ..., 0.3612, 0.9396, 0.2763],

  [0.3715, 0.8464, 0.0258, ..., 0.2218, 0.0808, 0.9323],

  [0.2634, 0.8852, 0.7021, ..., 0.4925, 0.6998, 0.0013]],

  [[0.7005, 0.2593, 0.1891, ..., 0.2242, 0.9181, 0.4466],

  [0.2316, 0.1313, 0.6365, ..., 0.2096, 0.4597, 0.0361],

  [0.2662, 0.8333, 0.4361, ..., 0.5952, 0.0086, 0.8168],

  ...,

  [0.0641, 0.5702, 0.9628, ..., 0.0303, 0.9381, 0.9755],

  [0.6629, 0.5515, 0.5912, ..., 0.5070, 0.1345, 0.2626],

  [0.6316, 0.1251, 0.1719, ..., 0.6973, 0.2206, 0.2461]]]])

  torch.Size([2, 3, 28, 28])

  计算Tensor中元素的数目

  示例代码:

  import torch

  a = torch.rand(10, 1, 28, 28)

  print(a.numel()) # number of element 10*1*28*28=7840

  输出结果:

  7840

Pytorch 张量维度的更多相关文章

  1. pytorch张量数据索引切片与维度变换操作大全(非常全)

    (1-1)pytorch张量数据的索引与切片操作1.对于张量数据的索引操作主要有以下几种方式:a=torch.rand(4,3,28,28):DIM=4的张量数据a(1)a[:2]:取第一个维度的前2 ...

  2. Pytorch——张量 Tensors

    张量 Tensors 1.torch.is_tensor torch.is_tensor(obj) 用法:判断是否为张量,如果是 pytorch 张量,则返回 True. 参数:obj (Object ...

  3. pytorch tensor 维度理解.md

    torch.randn torch.randn(*sizes, out=None) → Tensor(张量) 返回一个张量,包含了从标准正态分布(均值为0,方差为 1)中抽取一组随机数,形状由可变参数 ...

  4. Pytorch Tensor 维度的扩充和压缩

    维度扩展 x.unsqueeze(n) 在 n 号位置添加一个维度 例子: import torch x = torch.rand(3,2) x1 = x.unsqueeze(0) # 在第一维的位置 ...

  5. pytorch 去除维度为1的维度

    out.squeeze(dim=1) out.squeeze_(dim=1)

  6. pytorch中tensor张量数据基础入门

    pytorch张量数据类型入门1.对于pytorch的深度学习框架,其基本的数据类型属于张量数据类型,即Tensor数据类型,对于python里面的int,float,int array,flaot ...

  7. [PyTorch 学习笔记] 1.3 张量操作与线性回归

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/linear_regression.py 张量的操作 拼 ...

  8. PyTorch官方中文文档:torch

    torch 包 torch 包含了多维张量的数据结构以及基于其上的多种数学操作.另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化. 它有CUDA 的对应实现,可以在NVIDIA ...

  9. Pytorch 常用函数

    1. torch.renorm(input, p, dim, maxnorm, out=None) → Tensor Returns a tensor where each sub-tensor of ...

随机推荐

  1. 2019年MTP管理技能提升培训笔记

    2019年MTP管理技能提升培训笔记 管理专题培训–MTP管理技能提升培训 高水准的问题分析解决 何为高水准 高 多层探寻,高度分析,即需要有深度 水 团队讨论,水平思考,即需要有广度 准 预防应变, ...

  2. 【Linux】Linux环境变量的设置和查看

    Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效. 2 临时的:使用export命令声明即可,变量在关闭shell时失效. 设置变量 ...

  3. 配置HTTPS全过程

    HTTPS配置全过程服务器配置https协议HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. ...

  4. odoo开发笔记 -- related用法

    related:字面意思-关联字段,表示本字段引用关联表中的某字段. 格式为:fields.related(关系字段,引用字段,type,relation,string,...),关系字段是本对象的某 ...

  5. 谈谈RPC——golang中jsonrpc和grpc的使用

    前言 不知从什么时候rpc这个东西开始进入我们的视野,一开始做开发的时候经常使用的都是http,偶尔使用的是socket进行通信,使用的是restful的方式.但是,一次偶然的机会你会发现RPC这个东 ...

  6. SQL Server:时间范围查询重叠

    常常碰到要校验数据范围是否存在重叠冲突的情况,典型的场景是房间预订. 假如房间A已经有9月1日-9月10日的预订记录,当其它客人再来预订时,系统必须判断,不能与这个日期范围产生重叠. 有四种情况会产生 ...

  7. pytorch占用过多CPU问题

    Linux下,使用pytorch有时候会出现占用过多CPU资源的问题(占用过多线程),解决方法如下: 法一.torch.set_num_threads(int thread) (亲测比较有效) 法二. ...

  8. phpspreadsheet 中文文档(二) 结构+自动筛选

    2019年10月11日13:55:41 原理图 自动加载器 PhpSpreadsheet依赖于Composer自动加载器.因此,在独立使用PhpSpreadsheet之前,请确保先运行composer ...

  9. 使用vue搭建应用一入门

    1.准备 安装nodejs,配置环境变量 安装了nodejs,也就安装了npm 安装webpack npm install webpack -g 安装vue脚手架项目初始化工具 vue-cli npm ...

  10. java修改文件所有者及其权限

    1.设置所有者 管理文件所有者 Files.getOwner()和Files.setOwner()方法 要使用UserPrincipal来管理文件的所有者 (1)更改文件的所有者 import jav ...