创建Tensor

numpy是一个非常常见的数据的一个载体,数据可以先从numpy中间先导进tensor来;

1、从numpy引入 import from numpy

a=np.array([2,3.3])#从numpy中创建一个dim=1,长度为2的一个向量;
print(torch.from_numpy(a))#使用torch.from_numpy()的函数将numpy作为参数导进来,数据维持不变
#输出结果为tensor([2.0000,3.3000],dtype=torch.float(64))a=np.ones([2,3])#使用numpy的ones()函数新建了一个矩阵,三行两列
print(torch.from_numpy(a))#输出结果([[1.,1.,1.],[1.,1.,1.]],dtype=torch.float(64))

2、从list导入 import from list

#如果只用导入一个小数据量的数据,则可以不用numpy作为数据载体,可以直接在数据的参数里面使用类似的方法承载进去
a=torch.tensor([2.,3.2]) #创建一个向量
print(a) #输出结果tensor([2.0000,3.2000])a=torch.FloatTensor([2.,3.2])
print(a) #输出结果tensor([2.0000,3.2000])a=torch.tensor([2.,3.2],[1.,22.3 ])
print(a)

FloatTensor和tensor的区别:

FloatTensor,是接受shape作为参数,指定一个维度,生成一个没有初始化的数组类型(接受数据的维度);

tensor,是接受现有的数据;

3、怎么生成数据未初始化的数据

比如说我们要申请一片内从空间,不需要初始化,未初始化的数据不是说没有数据,而是数据一般是非常随机的,读写的时候可能会出现非常非常不规则的数据。

第一,可以直接使用empty()函数:Torch.empty()

第二,使用FloatTensor()函数,推荐使用的,给定一个shape,比如说,我们要生成一个CNN的图片,那就是说图片的第一个维度是80size,第二个维度是如果你用的是mini的数据集,第三个维度是28,第四个维度是28,因此我们使用float参数来生成这样。Torch.FloatTensor([3,1,28,28])

如果是生成int类型的tensor,就是Torch.TntTensor(d1,d2,d3)

未初始化的api使用的时候把它作为一个容器,后面要把数据写进来,不然直接使用,可能会造成一系列的问题。

4、设置默认的数据类型  set default type

torch.tensor([1.2,3]).type() #查看tensor的数据类型#把默认的数据类型改为double
torch.set_default_tensor_type(torch.DoubleTensor)

一般来说在pytorch中都会使用DoubleTensor的数据类型,因为精度比较高。

索引

1、最简单的索引,直接给定索引

a=torch.rand(4,3,28,28)#dim=4的数据,这个数据就是我们用的CNN里面的数据输入
#第一个维度是batch_size,第二个维度是n_channels,第三个和第四个是长和宽。 print(a[0].shape) #输出结果troch.Size([3,28,28])
#给了一个维度,表示取得是第一张图片,第一张图片包括三个通道,长和宽。print(a[0,0].shape) #输出结果torch.size([28,28])
#给了两个维度,dim=0和dim=1,表示取第0张图片的第0个通道,所以size就是28x28;print(a[0,0,2,4]) #输出结果tensor(0.8082)
#表示第0张图片的第0个通道,第二行第四列的像素点打印出来。

2、高级的索引方式

a=torch.rand(4,3,28,28)#dim=4的数据,这个数据就是我们用的CNN里面的数据输入
#第一个维度是batch_size,第二个维度是n_channels,第三个和第四个是长和宽。
print(a.shape) #输出结果torch.Size([4,3,28,28])print(a[:2].shape) #输出结果torch.Size([2,3,28,28])
#表示从0张图片开始到第二张图片,不包括第二张图片,也就是0和1两张图片。print(a[:2,:1,:,:].shape) #输出结果torch.Size([2,1,28,28])
#表示从0张图片开始到第二张图片,不包括第二张图片,也就是0和1两张图片,然后0通道,也就是一个通道,后面是全部都取,也就是28x28.print(a[:2,1:,:,:].shape) #输出结果torch.Size([2,2,28,28])
#表示从0张图片开始到第二张图片,不包括第二张图片,也就是0和1两张图片,然后从1通道到最后一个通道,也就是1通道和2通道,也就是两个通道,后面是全取,也就是28x28.print(a[:2,-1:,:,:].shape) #输出结果torch.Size([2,1,28,28])
#表示从0张图片开始到第二张图片,不包括第二张图片,也就是0和1两张图片,然后从-1通道也就是最后一个通道。后面是全取,也就是28x28.#[0,1,2],正向索引就是0,1,2;反向索引就是-3,-2,-1;

3、间隔采样 select by step

a=torch.rand(4,3,28,28)#dim=4的数据,这个数据就是我们用的CNN里面的数据输入
#第一个维度是batch_size,第二个维度是n_channels,第三个和第四个是长和宽。
print(a.shape) #输出结果torch.Size([4,3,28,28])print(a[:,:,0:28:2,0:28:2].shape) #输出结果torch.Size([4,3,14,14])
#表示对所有的batch和所有的channels,高和宽上做隔行采样,0:28表示取所有的,0:28:2表示隔行print(a[:,:,::2,::2].shape) #输出结果torch.Size([4,3,14,14])
#表示对所有的batch和所有的channels,高和宽上做隔行采样,:表示取所有的,::2表示隔行#通用形式: start:end:step

Pytorch——如何创建一个tensor与索引和切片(一)相关推荐

  1. Pytorch——如何创建一个tensor与索引和切片(二)

    1.两种常见的随机初始化 (1) rand函数 rander函数就是随机的使用0和1的均值分布来初始化,也就是说它从零和一的空间中随机的均匀的sample出来,这样数据就回均匀的分布在0和1之间. t ...

  2. 【小白学习PyTorch教程】十五、BERT:通过PyTorch来创建一个文本分类的Bert模型

    @Author:Runsen 2018 年,谷歌发表了一篇题为<Pre-training of deep bidirectional Transformers for Language Unde ...

  3. Pytorch中Tensor的索引,切片以及花式索引(fancy indexing)

    目录 理解Tensor的dim 索引 简单索引 用1维的list,numpy,tensor索引 用booltensor索引 切片 花式索引 结语 前一段时间遇到一个花式索引的问题,在搜索良久之后没有找 ...

  4. 数据库表的基本操作——创建一个表,索引和查询

    1.定义基本表.删除和更改 (1)定义基本表 create table <表名>(<列名><数据类型>[列级完整性约束条件]     [,<列名>< ...

  5. python如何创建一个列表,在python中创建一个由列表索引的字典

    I would like to create a dictionary which is indexed by lists. For instance, my dictionary should lo ...

  6. Tensor的索引与切片

    作用:调取数据中某一个或者某一块想取的数据 (1)常规索引方式(即a[ ][ ][ ]的方式) In [16]: a = tf.ones([3,28,28,3])In [17]: a[0][5][7] ...

  7. PyTorch教程(三):索引与切片

    a = torch.rand(4,3,28,28) # 4张图片,3通道,高度28,宽度28a[0].shape # torch.Size([3, 28, 28]) 表示第0张图片的shape是3通道 ...

  8. 【PyTorch】1入门——Tensor、自动微分、神经网络、PyTorch 图像分类

    PyTorch60min入门教程 1. PyTorch简介 2. 快速入门 2.1 安装与配置 2.2 PyTorch入门第一步 2.2.1 Tensor 2.2.2 自动微分 2.2.3 神经网络 ...

  9. 解决使用copy.deepcopy()拷贝Tensor或model时报错只支持用户显式创建的Tensor问题

    模型训练过程中常需边训练边做validation或在训练完的模型需要做测试,通常的做法当然是先创建model实例然后掉用load_state_dict()装载训练出来的权重到model里再调用mode ...

最新文章

  1. Microbiome:简单套路发高分文章--杨树内生和根际微生物组结构
  2. QIIME 2用户文档. 16鉴定和过滤嵌合体序列q2-vsearch(2018.11)
  3. android垂直公告,【Android之垂直翻页公告】
  4. mysql 组复制 不一致_使用MySQL组复制的限制和局限性
  5. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)
  6. 29岁“退休程序员”郭宇:有钱的人不一定自由,自由的人不一定有钱
  7. [ 逻辑锻炼] 用 JavaScript 做一个小游戏 ——2048 (详解版)
  8. 大国崛起:数据库领域的中国力量
  9. c语言中gotoxy,关于gotoxy的问题....
  10. Windows 10 让所有程序默认为“以管理员身份运行”并且取消“确认”按钮
  11. Win7网络和共享中心 依赖服务或组无法启动 解决办法
  12. [CCC2022 J2] Fergusonball Ratings
  13. 【CSS3】 CSS3实现“图片阴影”效果
  14. 利好消息再释放 重卡自动驾驶的智慧物流“掘金”计划
  15. 所有身体器官的英文单词
  16. IEEE754的理解归纳
  17. 腾讯地图输入关键字自动补全的应用及遇到的问题详解
  18. 零输入响应,零状态响应和完全响应
  19. shell真假01的真相
  20. JS实现HTML实体与字符的相互转换(一)

热门文章

  1. linux 加路由 网络不可达,无法添加静态路由:SIOADDRT:网络不可达
  2. 浏览器缓存有哪些,通常缓存有哪几种
  3. OFFICE 制作邀请函
  4. 年会邀请函如何制作?教你一分钟快速制作年会邀请函
  5. ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-2-02:资源包详解
  6. VMware Tanzu Kubernetes 发行版部署尝鲜
  7. Openzeppelin库第八期:Crowdsale
  8. linux machine start,Linux中的MACH定义之MACHINE_START / MACHINE_END
  9. vue项目 element表格数据行转列数据互转
  10. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员考试试卷