tensor

pytorch-RefineDet------PriorBox

假如想象 提交于 2020-01-02 08:49:48
相关函数 1、torch.clamp() torch.clamp(input, min, max, out=None) --> Tensor 将输入input Tensor中每个元素约束到【min,max】,返回一个截断后的new Tensor 例子: input = torch.Tensor([2,1,0.5,-0.5]) output = torch.clamp(input,0,1) print(output) ''' output Out[16]: tensor([1.000, 1.000, 0.500, 0.000]) ''' 2、itertools.product( ) product(*iterables,repeat=1) --> product object iterable是可迭代对象,repeat指定iterable重复几次,即product(A,repeat=3)等价于product(A,A,A) 该函数用于求输入迭代对象的笛卡尔集,相当于一个前天的for循环。product返回的是一个迭代器。 import itertools.product as product list1=['a','b'] list2=['c','d'] for item in product(list1,list2): print(item) ''' ... ('a','c') (

Pytorch框架应用系列 之 BPNet 4-2:全连接层到矩阵计算!FC近在眼前!

核能气质少年 提交于 2020-01-01 17:05:27
专题介绍及文章命名 2020年第一更!!祝愿大家新年快乐!撸起袖子加油干!越是艰险越向前!! 专题介绍在此!希望各位读者对这个专题的各篇博客定位有全局性质的把握~~ 再次提醒:该系列专题不涉及网络细节讲解,仅限于 工程实现 与 框架学习 。想更多了解该专题内容请点击上文专题介绍链接。 该专题中,文章命名方式为: Pytorch框架应用系列 之 《项目名称》 《总章节-当前章节》:《当前章节项目名称》 BP网络专题综述在此!想了解BP网络章节的文章构成?点击此处! 目录 一. 任务模型展示 二. 函数讲解   2.1 全连接层扛把子:torch.nn.Linear    2.1.1 函数的定义及参数功能    2.1.2 函数的数学表达与数据格式 《子任务章节》    2.1.3 函数的调用实例   2.2 激活函数:torch.nn.Sigmoid    2.2.1 函数的定义及参数功能    2.2.2 函数的调用实例   2.3 网络结构容器:torch.nn.Sequential    2.3.1 函数的定义及参数功能    2.3.2 函数的调用实例 三. 专题及章节位置信息查询 一. 任务模型展示 二. 函数讲解 2.1 全连接层扛把子:torch.nn.Linear; 注:明星函数 2.1.1 函数的定义及参数功能 首先我们先来看看官方的完整定义:

Pytorch中.data与.detach()的区别和作用

喜你入骨 提交于 2020-01-01 14:58:01
在Pytorch中,创建模型和数据运算传递时,经常会使用到tensor.data和tensor.detach(),对于这两种使用方式,都是对Variable中的tensor进行处理,但是都不进行梯度计算和被进行梯度跟踪,即requires_grad=False,简单来说,他们的区别如下: 相同点 两者都和原数据共享同一块数据; 都和原来数据的计算历史无关; requires_grad = False; 不同点 detach会进行提示,相比data更安全,在使用in-place操作后,会修改原数据的值,而如果在反向传播过程中使用到原数据会导致计算错误,而使用.detach就会报错。 在量化时的应用 在进行图像压缩或者其他需要对数据进行量化时,.data与.detach()的作用就很明显了,因为通常量化是不可导的,所以在整个模型的训练过程中,需要forward时量化取整,backward时梯度回传,就需要.data或者.detach()来实现了,forward时使用.data或者.detach,不进行梯度计算和梯度跟踪,软量化(为了使量化可导而使用逼近量化的可导函数)使用正常的tensor操作即可实现量化的同时,还能进行梯度回传。 例如: # y是需要量化的一个tensor y = y - alpha * F.sin(2 * np.pi * y) / (2 * np.pi) #软量化

pytorch总结—TENSOR ON GPU

假如想象 提交于 2020-01-01 07:22:03
用方法 to() 可以将 Tensor 在CPU和GPU(需要硬件⽀支持)之间相互移动。 if torch.cuda.is_available() : #返回True or False #当GPU可用为True,反之则为False device = torch.device("cuda") # GPU y = torch.ones_like(x, device=device) # 直接创建⼀个在GPU上的Tensor x = x.to(device) # 等价于 .to("cuda") z = x + y print(z) print(z.to("cpu", torch.double)) # to()还可以同时更改数据类型 来源: CSDN 作者: TJMtaotao 链接: https://blog.csdn.net/TJMtaotao/article/details/103763497

动手学深度学习 2

扶醉桌前 提交于 2019-12-31 16:49:04
第二章 预备知识 2.1 2.2 数据操作 在深度学习中,我们通常会频繁地对数据进行操作。做为动手学深度学习的基础,本节将介绍如何对内存中的数据进行操作。 在TensorFlow中,tensor是一个类,也是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现tensor和NumPy的多维数组非常类似。然而,tensor提供GPU计算和自动求梯度等更多功能,这些使tensor更加适合深度学习。 import tensorflow as tf print(tf.__version__) 1.12.0 2.2.1 创建tensor 我们先介绍tensor的最基本功能,我们用arange函数创建一个行向量 x = tf.constant(range(12)) 我们可以通过shape属性来获取tensor实例的形状。 print(x.shape) (12,) 这时返回了一个tensor实例,包含了从0开始的12个连续整数。 print(x) Tensor("Const_9:0", shape=(12,), dtype=int32) 我们也能够通过len得到tensor实例中元素(element)的总数。(注:tf1.0没有len函数) 下面使用reshape函数把行向量x的形状改为(3,4),页就是一个3行4列的矩阵,并记作X。除了形状改变之外,X中的元素保持不变。 X=tf

PyTorch自动微分

点点圈 提交于 2019-12-28 01:43:32
autograd包是pytorch中所有升级网络的核心。autograd软件包为tensor上的所有操作提供自动微分。它是一个由运行定义的框架,这意味着以代码运行方式定义你的后向传播,并且每次迭代都可以不同。 TENSOR 跟踪 torch.Tensor是包的核心类。如果将其属性 .requires_grad 设置为True,则会开始 跟踪 针对tensor的所有操作。完成计算后,可以调用 .backward() 来自动计算所有梯度。该张量的梯度将累积到.grad属性中。 停止跟踪 要 停止 tensor历史记录的跟踪,可以调用 .detach() ,它将其与技术历史记录分离,并防止将来的计算被跟踪。 要停止跟踪历史记录和使用内存,还可以将代码块使用 with torch.no_grad(): 包装起来。在评估模型时,特别有用,因为模型在训练阶段具有 requires_grad = True 的可训练参数有利于调参,但在评估阶段我们不需要梯度。 FUNCTION 还有一个类对于autograd实现非常重要的,是Function。Tensor和Function互相连接并构建一个非循环图,它保存真个完整的计算过程的历史信息。每个张量都有一个 .grad_fn 属性保存着创建了张量的Function的引用。如果用户自己创建张量,则 grad_fn 是None。 如果计算导数,可以调用

TensorFlow核心概念和原理介绍

。_饼干妹妹 提交于 2019-12-26 21:15:25
关于 TensorFlow TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。 节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。 TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。 核心概念:数据流图 数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。 “节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。 “线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。 张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。 更详细的介绍可以查看tensorflow中文社区:

Pytorch学习笔记(二)——Tensor

落花浮王杯 提交于 2019-12-26 19:48:50
一、对Tensor的操作 从接口的角度讲,对Tensor的操作可以分为两类: (1)torch.function (2)tensor.function 比如torch.sum(a, b)实际上和a.sum(b)功能等价。 从存储的角度讲,对Tensor的操作也可以分为两类: (1)不修改自身数据,如a.add(b),加法结果返回一个新的tensor; (2)修改自身数据,如a.add_(b),加法结果仍存在a中,a被改变。 函数名以_结尾的称为inplace方式。 二、Tensor的创建 常见的新建tensor的方法: Tensor(*sizes) 基础构造函数,不分配空间,未初始化 ones(*sizes) 全1的tensor zeros(*sizes) 全0的tensor eye(*sizes) 对角线为1,其余为0,不要求行列数相同 arange(s, e, step) 从s到e,步长为step linspace(s, e, steps) 从s到e,均匀切分成steps份 rand/randn(*sizes) 均匀/标准分布 normal(mean, std)/uniform(from, to) 正态分布/均匀分布 randperm(m) 随机排列 range(start, end, step),返回一个list对象也就是range.object,起始值为start

PyTorch中view的用法

瘦欲@ 提交于 2019-12-26 01:31:16
相当于numpy中resize()的功能,但是用法可能不太一样。 我的理解是: 把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。比如, a=torch.Tensor([[[1,2,3],[4,5,6]]]) b=torch.Tensor([1,2,3,4,5,6]) print(a.view(1,6)) print(b.view(1,6)) 得到的结果都是tensor([[1., 2., 3., 4., 5., 6.]]) 再看一个例子: a=torch.Tensor([[[1,2,3],[4,5,6]]]) print(a.view(3,2)) 将会得到: tensor([[1., 2.], [3., 4.], [5., 6.]]) 相当于就是从1,2,3,4,5,6顺序的拿数组来填充需要的形状。但是如果您想得到如下的结果: tensor([[1., 4.], [2., 5.], [3., 6.]]) 就需要使用另一个函数了:permute()。用法参见我的另一篇博客:PyTorch中permute的用法

Pytorch permute,contiguous

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-26 01:29:22
permute(dims),常用的维度转换方法 将tensor的维度换位 参数:dim(int)---换位顺序 >>>x = torch.randn(2,3,5) >>>x.size() torch.size([2,3,5]) >>>x.permute(2,0,1).size() torch.size([5,2,3]) contiguous() contiguous:view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。 一种可能的解释是: 有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的 view() 操作依赖于内存是整块的,这时只需要执行 contiguous() 这个函数,把tensor变成在内存中连续分布的形式。 判断是否contiguous用 torch.Tensor.is_contiguous() 函数。 import torch x = torch.ones(10, 10) x.is_contiguous() # True x.transpose(0, 1).is_contiguous() # False x.transpose(0, 1).contiguous().is_contiguous() #