深度学习--PyTorch定义Tensor以及索引和切片
深度学习--PyTorch定义Tensor
一、创建Tensor
1.1未初始化的方法
 这些方法只是开辟了空间,所附的初始值(非常大,非常小,0),后面还需要我们进行数据的存入。
- torch.empty():返回一个没有初始化的Tensor,默认是FloatTensor类型。
 
#torch.empty(d1,d2,d3)函数输入的是shape
torch.empty(2,3,5)
#tensor([[[-1.9036e-22,  6.8944e-43,  0.0000e+00,  0.0000e+00, -1.0922e-20],
#         [ 6.8944e-43, -2.8812e-24,  6.8944e-43, -5.9272e-21,  6.8944e-43],
#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00]],
#
#        [[ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00],
#         [ 0.0000e+00,  0.0000e+00,  1.4013e-45,  0.0000e+00,  0.0000e+00],
#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00]]])
- torch.FloatTensor():返回没有初始化的FloatTensor。
 
#torch.FloatTensor(d1,d2,d3)
torch.FloatTensor(2,2)
#tensor([[-0.0000e+00,  4.5907e-41],
#        [-7.3327e-21,  6.8944e-43]])
- torch.IntTensor():返回没有初始化的IntTensor。
 
#torch.IntTensor(d1,d2,d3)
torch.IntTensor(2,2)
#tensor([[          0,  1002524760],
#        [-1687359808,         492]], dtype=torch.int32)
1.2 随机初始化
随机均匀分布:rand/rand_like,randint
rand:[0,1)均匀分布;randint(min,max,[d1,d2,d3]) 返回[min,max)的整数均匀分布
#torch.rand(d1,d2,d3)
torch.rand(2,2)
#tensor([[0.8670, 0.6158],
#        [0.0895, 0.2391]])
#rand_like()
a=torch.rand(3,2)
torch.rand_like(a)
#tensor([[0.2846, 0.3605],
#        [0.3359, 0.2789],
#        [0.5637, 0.6276]])
#randint(min,max,[d1,d2,d3])
torch.randint(1,10,[3,3,3])
#tensor([[[3, 3, 8],
#         [2, 7, 7],
#         [6, 5, 9]],
#
#        [[7, 9, 9],
#         [6, 3, 9],
#         [1, 5, 6]],
#
#        [[5, 4, 8],
#         [7, 1, 2],
#         [3, 4, 4]]])
随机正态分布 randn
randn返回一组符合N(0,1)正态分布的随机数据
#randn(d1,d2,d3)
torch.randn(2,2)
#tensor([[ 0.3729,  0.0548],
#        [-1.9443,  1.2485]])
#normal(mean,std) 需要给出均值和方差
torch.normal(mean=torch.full([10],0.),std=torch.arange(1,0,-0.1))
#tensor([-0.8547,  0.1985,  0.1879,  0.7315, -0.3785, -0.3445,  0.7092,  0.0525, 0.2669,  0.0744])
#后面需要用reshape修正成自己想要的形状
1.3 赋值初始化
- full:返回一个定值
 
#full([d1,d2,d3],num)
torch.full([2,2],6)
#tensor([[6, 6],
#        [6, 6]])
torch.full([],6)
#tensor(6)   标量
torch.full([1],6)
#tensor([6]) 向量
- arange:返回一组阶梯,等差数列
 
#torch.arange(min,max,step):返回一个[min,max),步长为step的集体数组,默认为1
torch.arange(0,10)
#tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.arange(0,10,2)
#tensor([0, 2, 4, 6, 8])
- linspace/logspace:返回一组阶梯
 
#torch.linspace(min,max,steps):返回一个[min,max],数量为steps的数组
torch.linspace(1,10,11)
#tensor([ 1.0000,  1.9000,  2.8000,  3.7000,  4.6000,  5.5000,  6.4000,  7.3000,
#         8.2000,  9.1000, 10.0000])
#torch.logspace(a,b,steps):返回一个[10^a,10^b],数量为steps的数组
torch.logspace(0,1,10)
#tensor([ 1.0000,  1.2915,  1.6681,  2.1544,  2.7826,  3.5938,  4.6416,  5.9948,
#         7.7426, 10.0000])
- ones/zeros/eye:返回全1全0或者对角阵 ones_like/zeros_like
 
#torch.ones(d1,d2)
torch.ones(2,2)
#tensor([[1., 1.],
#        [1., 1.]])
#torch.zeros(d1,d2)
torch.zeros(2,2)
#tensor([[0., 0.],
#        [0., 0.]])
#torch.eye() 只能接收一个或两个参数
torch.eye(3)
#tensor([[1., 0., 0.],
#        [0., 1., 0.],
#        [0., 0., 1.]])
torch.eye(2,3)
#tensor([[1., 0., 0.],
#        [0., 1., 0.]])
1.4 随机打散变量
- randperm:一般用于位置操作。类似random.shuffle()。
 
torch.randperm(8)
#tensor([2, 6, 7, 5, 3, 4, 1, 0])
二、索引与切片
- 简单索引方式
 
a=torch.rand(4,3,28,28)
a[0].shape
#torch.Size([3, 28, 28])
a[0,0,0,0]
#tensor(0.9373)
- 批量索引方式 开始位置:结束位置 左边取的到,右边取不到 算是一种切片 [0,1,2]->[-3,-2,-1]
 
a[:2].shape
#torch.Size([2, 3, 28, 28])
a[1:].shape
#torch.Size([3, 3, 28, 28])
- 隔行采样方式 开始位置:结束位置:间隔
 
a[:,:,0:28:2,:].shape
#torch.Size([4, 3, 14, 28])
- 任意取样方式 a.index_select(d,[d层的数据索引])
 
a.index_select(0,torch.tensor([0,2])).shape
#torch.Size([2, 3, 28, 28])
a.index_select(1,torch.tensor([0,2])).shape
#torch.Size([4, 2, 28, 28])
- ...任意维度取样
 
a[...].shape
#torch.Size([4, 3, 28, 28])
a[0,...].shape
#torch.Size([3, 28, 28])
a[:,2,...].shape
#torch.Size([4, 28, 28])
- 掩码索引mask x.ge(0.5) 表示大于等于0.5的为1,小于0.5的为0
 
#torch.masked_select 取出掩码对应位置的值
x=torch.randn(3,4)
mask=x.ge(0.5)
torch.masked_select(x,mask)
#tensor([1.6950, 1.2207, 0.6035])
- 具体索引 take(变量,位置) 会把变量变为一维的
 
x=torch.randn(3,4)
torch.take(x,torch.tensor([0,1,5]))
#tensor([-2.2092, -0.2652,  0.4848])
												
											深度学习--PyTorch定义Tensor以及索引和切片的更多相关文章
- [深度学习] Pytorch学习(一)—— torch tensor
		
[深度学习] Pytorch学习(一)-- torch tensor 学习笔记 . 记录 分享 . 学习的代码环境:python3.6 torch1.3 vscode+jupyter扩展 #%% im ...
 - [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题
		
[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...
 - [深度学习] pytorch学习笔记(2)(梯度、梯度下降、凸函数、鞍点、激活函数、Loss函数、交叉熵、Mnist分类实现、GPU)
		
一.梯度 导数是对某个自变量求导,得到一个标量. 偏微分是在多元函数中对某一个自变量求偏导(将其他自变量看成常数). 梯度指对所有自变量分别求偏导,然后组合成一个向量,所以梯度是向量,有方向和大小. ...
 - [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)
		
一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...
 - pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片
		
常见的学习种类 线性回归,最简单的y=wx+b型的,就像是调节音量大小.逻辑回归,是否问题.分类问题,是猫是狗是猪 最简单的线性回归y=wx+b 目的:给定大量的(x,y)坐标点,通过机器学习来找出最 ...
 - 深度学习PyTorch环境安装——mac
		
参考:http://python.jobbole.com/87522/ 1.首先要安装Anaconda 1)什么是Anaconda Anaconda是Python的包管理器和环境管理器,是一个包含18 ...
 - Numpy学习二:数组的索引与切片
		
1.一维数组索引与切片#创建一维数组arr1d = np.arange(10)print(arr1d) 结果:[0 1 2 3 4 5 6 7 8 9] #数组的索引从0开始,通过索引获取第三个元素a ...
 - [深度学习] pytorch学习笔记(4)(Module类、实现Flatten类、Module类作用、数据增强)
		
一.继承nn.Module类并自定义层 我们要利用pytorch提供的很多便利的方法,则需要将很多自定义操作封装成nn.Module类. 首先,简单实现一个Mylinear类: from torch ...
 - [深度学习] pytorch学习笔记(3)(visdom可视化、正则化、动量、学习率衰减、BN)
		
一.visdom可视化工具 安装:pip install visdom 启动:命令行直接运行visdom 打开WEB:在浏览器使用http://localhost:8097打开visdom界面 二.使 ...
 - [深度学习] pytorch利用Datasets和DataLoader读取数据
		
本文简单描述如果自定义dataset,代码并未经过测试(只是说明思路),为半伪代码.所有逻辑需按自己需求另外实现: 一.分析DataLoader train_loader = DataLoader( ...
 
随机推荐
- Windows使用技巧(持续更新)
			
如何将应用添加到鼠标右键菜单? 1. Win+R 输入:regedit打开注册表 2. 找到HKEY_CLASSES_ROOT\Directory\Background\shell,在该路径下创建项 ...
 - 查看app包名
			
操作步骤: 1.cmd中输入命令:adb shell am monitor 2.启动需要获取包名的应用
 - String当中的intern()
			
public class String001 { public static void main(String[] args) { String s1 = "hello"; Str ...
 - vs2019升级到16.8编译报razortaghelper 任务意外失败的错误
			
为了体验.net 5,把vs升级到了最新版本16.8,然后编译原来的项目(.net core 2.2),报了以下错误: 解决方法如下: 删除C:\Program Files\dotnet\sdk\Nu ...
 - Nginx lavarel框架伪静态配置
			
location / { try_files $uri $uri/ /index.php$is_args$query_string; }
 - SQL中通过表字段名称查询对应表名称
			
select * from sys.objects as a where a.object_id in(select [OBJECT_ID] from sys.all_columns where na ...
 - 学习记录--C++继承与派生编程题
			
1.设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生出来的 要求输出一个圆桌的高度,面积与颜色等. #include<iostream&g ...
 - jmeter设置中文
			
jmeter.properties #language=enlanguage=zh_CN
 - 整合Swagger2
			
整合Swagger2 1.Swagger介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web ...
 - [极客大挑战 2019]PHP 1
			
进入后提示我们网页有备份文件,这边使用爆破工具,网页会down掉 随便随便猜了一下www.zip,成功下载源码 常见的网页备份有 .git ~ .swp .swo .bak .zip 还不知道是什么题 ...