深度学习--PyTorch定义Tensor

一、创建Tensor

1.1未初始化的方法

​ 这些方法只是开辟了空间,所附的初始值(非常大,非常小,0),后面还需要我们进行数据的存入。

  • torch.empty():返回一个没有初始化的Tensor,默认是FloatTensor类型。
  1. #torch.empty(d1,d2,d3)函数输入的是shape
  2. torch.empty(2,3,5)
  3. #tensor([[[-1.9036e-22, 6.8944e-43, 0.0000e+00, 0.0000e+00, -1.0922e-20],
  4. # [ 6.8944e-43, -2.8812e-24, 6.8944e-43, -5.9272e-21, 6.8944e-43],
  5. # [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],
  6. #
  7. # [[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
  8. # [ 0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00, 0.0000e+00],
  9. # [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]]])
  • torch.FloatTensor():返回没有初始化的FloatTensor。
  1. #torch.FloatTensor(d1,d2,d3)
  2. torch.FloatTensor(2,2)
  3. #tensor([[-0.0000e+00, 4.5907e-41],
  4. # [-7.3327e-21, 6.8944e-43]])
  • torch.IntTensor():返回没有初始化的IntTensor。
  1. #torch.IntTensor(d1,d2,d3)
  2. torch.IntTensor(2,2)
  3. #tensor([[ 0, 1002524760],
  4. # [-1687359808, 492]], dtype=torch.int32)

1.2 随机初始化

  • 随机均匀分布:rand/rand_like,randint

    rand:[0,1)均匀分布;randint(min,max,[d1,d2,d3]) 返回[min,max)的整数均匀分布

  1. #torch.rand(d1,d2,d3)
  2. torch.rand(2,2)
  3. #tensor([[0.8670, 0.6158],
  4. # [0.0895, 0.2391]])
  5. #rand_like()
  6. a=torch.rand(3,2)
  7. torch.rand_like(a)
  8. #tensor([[0.2846, 0.3605],
  9. # [0.3359, 0.2789],
  10. # [0.5637, 0.6276]])
  11. #randint(min,max,[d1,d2,d3])
  12. torch.randint(1,10,[3,3,3])
  13. #tensor([[[3, 3, 8],
  14. # [2, 7, 7],
  15. # [6, 5, 9]],
  16. #
  17. # [[7, 9, 9],
  18. # [6, 3, 9],
  19. # [1, 5, 6]],
  20. #
  21. # [[5, 4, 8],
  22. # [7, 1, 2],
  23. # [3, 4, 4]]])
  • 随机正态分布 randn

    randn返回一组符合N(0,1)正态分布的随机数据

  1. #randn(d1,d2,d3)
  2. torch.randn(2,2)
  3. #tensor([[ 0.3729, 0.0548],
  4. # [-1.9443, 1.2485]])
  5. #normal(mean,std) 需要给出均值和方差
  6. torch.normal(mean=torch.full([10],0.),std=torch.arange(1,0,-0.1))
  7. #tensor([-0.8547, 0.1985, 0.1879, 0.7315, -0.3785, -0.3445, 0.7092, 0.0525, 0.2669, 0.0744])
  8. #后面需要用reshape修正成自己想要的形状

1.3 赋值初始化

  • full:返回一个定值
  1. #full([d1,d2,d3],num)
  2. torch.full([2,2],6)
  3. #tensor([[6, 6],
  4. # [6, 6]])
  5. torch.full([],6)
  6. #tensor(6) 标量
  7. torch.full([1],6)
  8. #tensor([6]) 向量
  • arange:返回一组阶梯,等差数列
  1. #torch.arange(min,max,step):返回一个[min,max),步长为step的集体数组,默认为1
  2. torch.arange(0,10)
  3. #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  4. torch.arange(0,10,2)
  5. #tensor([0, 2, 4, 6, 8])
  • linspace/logspace:返回一组阶梯
  1. #torch.linspace(min,max,steps):返回一个[min,max],数量为steps的数组
  2. torch.linspace(1,10,11)
  3. #tensor([ 1.0000, 1.9000, 2.8000, 3.7000, 4.6000, 5.5000, 6.4000, 7.3000,
  4. # 8.2000, 9.1000, 10.0000])
  5. #torch.logspace(a,b,steps):返回一个[10^a,10^b],数量为steps的数组
  6. torch.logspace(0,1,10)
  7. #tensor([ 1.0000, 1.2915, 1.6681, 2.1544, 2.7826, 3.5938, 4.6416, 5.9948,
  8. # 7.7426, 10.0000])
  • ones/zeros/eye:返回全1全0或者对角阵 ones_like/zeros_like
  1. #torch.ones(d1,d2)
  2. torch.ones(2,2)
  3. #tensor([[1., 1.],
  4. # [1., 1.]])
  5. #torch.zeros(d1,d2)
  6. torch.zeros(2,2)
  7. #tensor([[0., 0.],
  8. # [0., 0.]])
  9. #torch.eye() 只能接收一个或两个参数
  10. torch.eye(3)
  11. #tensor([[1., 0., 0.],
  12. # [0., 1., 0.],
  13. # [0., 0., 1.]])
  14. torch.eye(2,3)
  15. #tensor([[1., 0., 0.],
  16. # [0., 1., 0.]])

1.4 随机打散变量

  • randperm:一般用于位置操作。类似random.shuffle()。
  1. torch.randperm(8)
  2. #tensor([2, 6, 7, 5, 3, 4, 1, 0])

二、索引与切片

  • 简单索引方式
  1. a=torch.rand(4,3,28,28)
  2. a[0].shape
  3. #torch.Size([3, 28, 28])
  4. a[0,0,0,0]
  5. #tensor(0.9373)
  • 批量索引方式 开始位置:结束位置 左边取的到,右边取不到 算是一种切片 [0,1,2]->[-3,-2,-1]
  1. a[:2].shape
  2. #torch.Size([2, 3, 28, 28])
  3. a[1:].shape
  4. #torch.Size([3, 3, 28, 28])
  • 隔行采样方式 开始位置:结束位置:间隔
  1. a[:,:,0:28:2,:].shape
  2. #torch.Size([4, 3, 14, 28])
  • 任意取样方式 a.index_select(d,[d层的数据索引])
  1. a.index_select(0,torch.tensor([0,2])).shape
  2. #torch.Size([2, 3, 28, 28])
  3. a.index_select(1,torch.tensor([0,2])).shape
  4. #torch.Size([4, 2, 28, 28])
  • ...任意维度取样
  1. a[...].shape
  2. #torch.Size([4, 3, 28, 28])
  3. a[0,...].shape
  4. #torch.Size([3, 28, 28])
  5. a[:,2,...].shape
  6. #torch.Size([4, 28, 28])
  • 掩码索引mask x.ge(0.5) 表示大于等于0.5的为1,小于0.5的为0
  1. #torch.masked_select 取出掩码对应位置的值
  2. x=torch.randn(3,4)
  3. mask=x.ge(0.5)
  4. torch.masked_select(x,mask)
  5. #tensor([1.6950, 1.2207, 0.6035])
  • 具体索引 take(变量,位置) 会把变量变为一维的
  1. x=torch.randn(3,4)
  2. torch.take(x,torch.tensor([0,1,5]))
  3. #tensor([-2.2092, -0.2652, 0.4848])

深度学习--PyTorch定义Tensor以及索引和切片的更多相关文章

  1. [深度学习] Pytorch学习(一)—— torch tensor

    [深度学习] Pytorch学习(一)-- torch tensor 学习笔记 . 记录 分享 . 学习的代码环境:python3.6 torch1.3 vscode+jupyter扩展 #%% im ...

  2. [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

    [深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...

  3. [深度学习] pytorch学习笔记(2)(梯度、梯度下降、凸函数、鞍点、激活函数、Loss函数、交叉熵、Mnist分类实现、GPU)

    一.梯度 导数是对某个自变量求导,得到一个标量. 偏微分是在多元函数中对某一个自变量求偏导(将其他自变量看成常数). 梯度指对所有自变量分别求偏导,然后组合成一个向量,所以梯度是向量,有方向和大小. ...

  4. [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)

    一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...

  5. pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片

    常见的学习种类 线性回归,最简单的y=wx+b型的,就像是调节音量大小.逻辑回归,是否问题.分类问题,是猫是狗是猪 最简单的线性回归y=wx+b 目的:给定大量的(x,y)坐标点,通过机器学习来找出最 ...

  6. 深度学习PyTorch环境安装——mac

    参考:http://python.jobbole.com/87522/ 1.首先要安装Anaconda 1)什么是Anaconda Anaconda是Python的包管理器和环境管理器,是一个包含18 ...

  7. Numpy学习二:数组的索引与切片

    1.一维数组索引与切片#创建一维数组arr1d = np.arange(10)print(arr1d) 结果:[0 1 2 3 4 5 6 7 8 9] #数组的索引从0开始,通过索引获取第三个元素a ...

  8. [深度学习] pytorch学习笔记(4)(Module类、实现Flatten类、Module类作用、数据增强)

    一.继承nn.Module类并自定义层 我们要利用pytorch提供的很多便利的方法,则需要将很多自定义操作封装成nn.Module类. 首先,简单实现一个Mylinear类: from torch ...

  9. [深度学习] pytorch学习笔记(3)(visdom可视化、正则化、动量、学习率衰减、BN)

    一.visdom可视化工具 安装:pip install visdom 启动:命令行直接运行visdom 打开WEB:在浏览器使用http://localhost:8097打开visdom界面 二.使 ...

  10. [深度学习] pytorch利用Datasets和DataLoader读取数据

    本文简单描述如果自定义dataset,代码并未经过测试(只是说明思路),为半伪代码.所有逻辑需按自己需求另外实现: 一.分析DataLoader train_loader = DataLoader( ...

随机推荐

  1. Stream流相关方法

    LIST<对象> 转换MAP 并根据某个字段分组 // 并根据某个字段分组,并做了归类 Map<String, List<User>> collect = user ...

  2. 【内存管理】ION内存管理器浅析(system contig heap)

    system contig heap与system heap 从代码中我们看到system contig heap与system heap同属一个文件中,ion_system_heap.c 相同点:它 ...

  3. kettle连接mysql报Communications link failure

    添加2个命名参数 1.autoReconnect=true 2.useSSL=false

  4. 九九乘法表打印记一次al面试

    for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i + "x&quo ...

  5. 第一天1h

    //摄氏度和华氏度之间的换算//20211120//ZhangWenjing#include<stdio.h>int main(void){ int f = 0; int c = 0; s ...

  6. SEGGER_RTT_printf()函数添加打印浮点数功能

    SEGGER 的实时传输 (RTT) 是一种用于嵌入式应用程序中交互式用户 I/O 的技术.它以非常高的性能结合了 SWO 和半主机的优势.但是在笔者使用时(RTT v758版本),其暂时不支持浮点数 ...

  7. C#中冒号:使用场景

    1. 继承类.实现接口与继承构造函数 ① 继承类 /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public p ...

  8. layui 手册

    https://layui.yii666.com/doc/modules/layer.html

  9. python - 命令行下一键更新所有包

    Python3.8以下这样一键更新所有包:from pip._internal.utils.misc import get_installed_distributionsfrom subprocess ...

  10. 实验1.SDN拓扑实践

    实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...