Pytorch——张量 Tensors
张量 Tensors
1、torch.is_tensor
torch.is_tensor(obj)
用法:判断是否为张量,如果是 pytorch 张量,则返回 True。
参数:obj (Object) – 判断对象
例子:
torch.is_tensor(torch.rand(2,3))
True
2、 torch.is_storage
torch.is_storage(obj)
用法:判断是否为pytorch Storage,如何是,则返回True
参数:input (Object) – 判断对象
例子:
torch.is_storage(torch.rand(2,3))
False
3、torch.numel
torch.numel(input)->int
用法:返回input
张量中的元素个数
参数:input (Tensor) – 输入张量
例子:
torch.numel(torch.rand(2,3))
6
4、torch.eye
torch.eye(n, m=None, out=None)
用法:返回一个2维张量,对角线数字为1,其它位置为0
参数:
n
(int) – 行数m
(int, 可选) – 列数.如果为None,则默认为nout
(Tensor,可选) - 输出张量
例子:
torch.eye(3, m=2)
tensor([[1., 0.],
[0., 1.],
[0., 0.]])
torch.eye(3)
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
5、torch.from_numpy
torch.from_numpy(ndarray) → Tensor
用法:将 numpy.ndarray
转换为 Tensor
。 返回的张量 tensor 和 numpy 的 ndarray 共享同一内存空间。修改一个会导致另外一个也被修改。返回的张量不能调整大小。
参数:ndarray
例子:
x = np.random.rand(2,3)
x
array([[0.84130586, 0.64710973, 0.82838384],
[0.50825928, 0.3054745 , 0.22876226]])
y = torch.from_numpy(x)
y
tensor([[0.8413, 0.6471, 0.8284],
[0.5083, 0.3055, 0.2288]], dtype=torch.float64)
6、torch.linspace
torch.linspace(start, end, steps=100, out=None) → Tensor
用法:返回start和end之间长度为steps
的一维张量 参数:
参数:
start (float)
– 点集的起始值end (float)
– 点集的最终值steps (int)
– 在start
和end
间的采样数,即返回多少个数out (Tensor, 可选的)
– 结果张量
例子:
x = torch.linspace(1,10,steps=5)
x
tensor([ 1.0000, 3.2500, 5.5000, 7.7500, 10.0000])
7、torch.logspace
torch.logspace(start, end, steps=100, out=None) → Tensor
用法:返回一个 1 维张量,包含在区间10^start和10^end上以对数刻度均匀间隔的steps
个点。 输出1维张量的长度为steps
。
参数:
start (float)
– 该点集的起始点end (float)
– 该点集的最终值steps (int)
– 在start
和end
间生成的样本数out (Tensor, 可选)
– 结果张量
例子:
x = torch.logspace(1,10,steps=5)
x
tensor([1.0000e+01, 1.7783e+03, 3.1623e+05, 5.6234e+07, 1.0000e+10])
8、torch.ones
torch.ones(*sizes, out=None) → Tensor
用法:返回一个全为1的张量,形状由可变参数sizes
定义。
参数:
sizes (int...)
– 整数序列,定义了输出形状,如:(5,5),(2)out (Tensor, 可选)
– 结果张量
例子:
x = torch.ones(5,5)
x
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
x = torch.ones(5)
x
tensor([1., 1., 1., 1., 1.])
9、torch.randn
torch.randn(*sizes, out=None) → Tensor
用法:返回一个张量,包含了从正态分布(均值为0,方差为 1,即高斯白噪声)中抽取一组随机数。 Tensor的形状由变量sizes
定义。
参数:
sizes (int...)
– 整数序列,定义了输出形状`out (Tensor, 可选) - 结果张量
例子:
x = torch.randn(2)
x
tensor([ 0.1526, -0.0788])
x = torch.randn(2,2)
x
tensor([[-0.4000, 0.6303],
[ 0.5029, 0.3646]])
10、torch.randperm
torch.randperm(n, out=None) → LongTensor
用法:输入参数n
,返回一个从0
到n -1
的随机整数排列。
参数:
n(int)
– 上限(独占),即最大值
例子:
x = torch.randperm(10)
x
tensor([9, 2, 5, 3, 1, 0, 8, 4, 7, 6])
11、torch.arange
torch.arange(start, end, step=1, out=None) → Tensor
用法:返回一个1维张量,长度为floor((end−start)/step),floor代表向下取整。包含从start
到end
,以step
为步长的一组序列值(默认步长为1)。
参数:
start (float)
– 该点集的起始点end (float)
– 该点集的终止点step (float)
– 相邻点的间隔大小out (Tensor, 可选的)
– 结果张量
例子:
x = torch.arange(1,10,step=2)
x
tensor([1, 3, 5, 7, 9])
x = torch.arange(1, 2.5, 0.5)
x
tensor([1.0000, 1.5000, 2.0000])
12、torch.range
torch.range(start, end, step=1, out=None) → Tensor
用法:返回一个1维张量,长度为floor((end−start)/step)+1,其中floor代表向下取整数。从start
开始,end
为结尾,以step
为步长的一组值。 step
是两个值之间的间隔,即 $X_i+1=X_i+step$
参数:
- start (float) – 该点集的起始点
- end (float) – 该点集的最终值
- step (int) – 相邻点之间的间隔大小
- out (Tensor, 可选的) – 结果张量
例子:
x = torch.range(1,10,step=2)
x
tensor([1., 3., 5., 7., 9.])
x = torch.range(1, 2.5, 0.5)
x
tensor([1.0000, 1.5000, 2.0000, 2.5000])
13、torch.zeros
torch.zeros(*sizes, out=None) → Tensor
用法:返回一个全0的张量,形状由可变参数sizes
定义。
参数:
- sizes (int...) – 整数序列,定义了输出形状
- out (Tensor, 可选) – 结果张量
例子:
x = torch.zeros(3)
x
tensor([0., 0., 0.])
x = torch.zeros(3,2)
x
tensor([[0., 0.],
[0., 0.],
[0., 0.]])
索引,切片,连接,变异操作
1、torch.cat
torch.cat(seq, dim=0, out=None) → Tensor
用法:在给定维度上对输入的张量序列seq
进行连接操作。
参数:
- seq(Tensors的序列) - 可以是相同类型的Tensor的任何python序列。
- dim(int,可选) - 张量连接的尺寸
- out(Tensor,可选) - 输出参数
例子:
x = torch.arange(0,4).view(-1,2)
print(x[0])
print(x[1])
tensor([0, 1])
tensor([2, 3])
torch.cat((x,x,x),dim=0)
tensor([[0, 1],
[2, 3],
[0, 1],
[2, 3],
[0, 1],
[2, 3]])
torch.cat((x,x,x),dim=1)
tensor([[0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3]])
C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。
C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。
2、torch.nonzero
torch.nonzero(input, out=None) → LongTensor
用法:返回一个包含输入input中非零元素索引的张量。输出张量中的每行包含输入中非零元素的索引。
如果输入input有n维,则输出的索引张量output的形状为 z x n, 这里 z 是输入张量input中所有非零元素的个数。
参数:
- input (Tensor) – 源张量
- out (LongTensor, 可选的) – 包含索引值的结果张量
例子:
torch.nonzero(torch.Tensor([1, 1, 1, 0, 1]))
tensor([[0],
[1],
[2],
[4]])
torch.nonzero(torch.Tensor([[0.6, 0.0, 1.0, 0.0],
[0.0, 0.4, 0.0, 0.0],
[0.0, 0.0, 1.2, 0.0],
[0.0, 0.0, 0.0,-0.4]]))
tensor([[0, 0],
[0, 2],
[1, 1],
[2, 2],
[3, 3]])
3、torch.split
torch.split(tensor, split_size, dim=0)
用法:将输入张量分割成相等形状的chunks(如果可分)。 如果沿指定维的张量形状大小不能被split_size
整分, 则最后一个分块会小于其它分块。
参数:
- tensor (Tensor) – 待分割张量
- split_size (int) – 单个分块的形状大小
- dim (int) – 沿着此维进行分割
例子:
x = torch.Tensor([[0.6, 0.0, 1.0, 0.0],
[0.0, 0.4, 0.0, 0.0],
[0.0, 0.0, 1.2, 0.0],
[0.0, 0.0, 0.0,-0.4]])
torch.split(x, 2, dim=0)
(tensor([[0.6000, 0.0000, 1.0000, 0.0000],
[0.0000, 0.4000, 0.0000, 0.0000]]),
tensor([[ 0.0000, 0.0000, 1.2000, 0.0000],
[ 0.0000, 0.0000, 0.0000, -0.4000]]))
torch.split(x, 2, dim=1)
(tensor([[0.6000, 0.0000],
[0.0000, 0.4000],
[0.0000, 0.0000],
[0.0000, 0.0000]]),
tensor([[ 1.0000, 0.0000],
[ 0.0000, 0.0000],
[ 1.2000, 0.0000],
[ 0.0000, -0.4000]]))
4、torch.squeeze
torch.squeeze(input, dim=None, out=None)
用法:将输入张量形状中的1 去除并返回。 如果输入是形如($A \times 1\times B \times 1 \times C \times 1 \times D$) ,那么输出形状就为:($A \times B \times C \times D$)
当给定dim
时,那么挤压操作只在给定维度上。例如,输入形状为: $(A \times 1 \times B) $, squeeze(input, 0)
将会保持张量不变,只有用 squeeze(input, 1)
,形状会变成 $(A \times B )$。
参数:
- input (Tensor) – 输入张量
- dim (int, 可选的) – 如果给定,则
input
只会在给定维度挤压 - out (Tensor, 可选的) – 输出张量
例子:
x = torch.zeros(2,1,2,1,2)
x.size()
torch.Size([2, 1, 2, 1, 2])
y = torch.squeeze(x)
y.size()
torch.Size([2, 2, 2])
torch.Size([2, 1, 2, 1, 2])
torch.Size([2, 1, 2, 1, 2])
y = torch.squeeze(x, 1)
y.size()
torch.Size([2, 2, 1, 2])
5、torch.stack
torch.stack(sequence, dim=0)
用法:沿着一个新维度对输入张量序列进行连接。 序列中所有的张量都应该为相同形状。
参数:
- sqequence (Sequence) – 待连接的张量序列
- dim (int) – 插入的维度。必须介于 0 与 待连接的张量序列数之间。
6、torch.t
torch.t(input, out=None) → Tensor
用法:输入一个矩阵(2维张量),并转置0, 1维。 可以被视为函数transpose(input, 0, 1)
的简写函数。
参数:
- input (Tensor) – 输入张量
out (Tensor, 可选的) – 结果张量
例子:
x = torch.randn(2, 3)
torch.t(x)
tensor([[ 0.2929, 0.1270],
[-0.0673, -0.3026],
[-0.4359, 0.4589]])
7、torch.transpose
torch.transpose(input, dim0, dim1, out=None) → Tensor
用法:返回输入矩阵input
的转置。交换维度dim0
和dim1
。 输出张量与输入张量共享内存,所以改变其中一个会导致另外一个也被修改。
参数:
- input (Tensor) – 输入张量
- dim0 (int) – 转置的第一维
- dim1 (int) – 转置的第二维
例子:
x = torch.randn(2, 3)
x
tensor([[-0.0635, -0.4873, 0.1029],
[ 0.3269, 1.8284, 0.1268]])
torch.transpose(x, 0, 1)
tensor([[-0.0635, 0.3269],
[-0.4873, 1.8284],
[ 0.1029, 0.1268]])
8、torch.unbind
torch.unbind(tensor, dim=0)[source]
用法:移除指定维后,返回一个元组,包含了沿着指定维切片后的各个切片
参数:
- tensor (Tensor) – 输入张量
- dim (int) – 删除的维度
9、torch.unsqueeze
torch.unsqueeze(input, dim, out=None)
用法:返回一个新的张量,对输入的制定位置插入维度 1
参数:
- tensor (Tensor) – 输入张量
- dim (int) – 插入维度的索引
- out (Tensor, 可选的) – 结果张量
例子:
x = torch.Tensor([1, 2, 3, 4])
torch.unsqueeze(x, 0)
tensor([[1., 2., 3., 4.]])
torch.unsqueeze(x, 1)
tensor([[1.],
[2.],
[3.],
[4.]])
随机抽样 Random sampling
1、torch.manual_seed
torch.manual_seed(seed)
用法:设定生成随机数的种子,并返回一个 _torch.C.Generator 对象.
参数:seed (int or long) – 种子.
例子:
torch.manual_seed(1)
<torch._C.Generator at 0x19749eb5890>
2、torch.initial_seed
torch.initial_seed()
用法:返回生成随机数的原始种子值(python long)。
例子:
torch.manual_seed(12)
torch.initial_seed()
12
3、torch.bernoulli
torch.bernoulli(input, out=None) → Tensor
用法:
从伯努利分布中抽取二元随机数(0 或者 1)。
输入张量须包含用于抽取上述二元随机值的概率。 因此,输入中的所有值都必须在[0,1]区间,即 $( 0<=input_i<=1 )$
输出张量的第 $i$ 个元素值, 将会以输入张量的第 $i$ 个概率值等于1
。
返回值将会是与输入相同大小的张量,每个值为 0 或者 1 参数:
参数:
- input (Tensor) – 输入为伯努利分布的概率值
- out (Tensor, 可选的) – 输出张量(可选)
例子:
a = torch.Tensor(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]
a
tensor([[0.4657, 0.2328, 0.4527],
[0.5871, 0.4086, 0.1272],
[0.6373, 0.2421, 0.7312]])
torch.bernoulli(a)
tensor([[0., 1., 0.],
[1., 0., 0.],
[1., 0., 0.]])
a = torch.ones(3, 3) # probability of drawing "1" is 1
torch.bernoulli(a)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
a = torch.zeros(3, 3) # probability of drawing "1" is 0
torch.bernoulli(a)
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
4、torch.multinomial
torch.multinomial(input, num_samples,replacement=False, out=None) → LongTensor
用法:
返回一个张量,每行包含从input
相应行中定义的多项分布中抽取的num_samples
个样本。
当抽取样本时,依次从左到右排列(第一个样本对应第一列)。
如果输入input
是一个向量,输出out
也是一个相同长度 num_samples
的向量。如果输入 input
是有 m 行的矩阵,输出 out
是形如 $m \times n$ 的矩阵。
如果参数 replacement
为 True, 则样本抽取可以重复。否则,一个样本在每行不能被重复抽取。
参数 num_samples
必须小于 input
长度(即,input
的列数,如果是 input
是一个矩阵)。
参数:
- input (Tensor) – 包含概率值的张量
- num_samples (int) – 抽取的样本数
- replacement (bool, 可选的) – 布尔值,决定是否能重复抽取
- out (Tensor, 可选的) – 结果张量
例子:
weights = torch.Tensor([0, 10, 3, 0]) # create a Tensor of weights
torch.multinomial(weights, 4)
tensor([1, 2, 0, 3])
torch.multinomial(weights, 4, replacement=True)
tensor([2, 1, 1, 1])
5、torch.normal()
torch.normal(means, std, out=None)
用法:返回一个张量,包含从给定参数means
,std
的离散正态分布中抽取随机数。 均值means
是一个张量,包含每个输出元素相关的正态分布的均值。 std
是一个张量,包含每个输出元素相关的正态分布的标准差。 均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
参数:
- means (Tensor) – 均值
- std (Tensor) – 标准差
- out (Tensor) – 可选的输出张量
例子:
torch.normal(means=torch.arange(1, 11), std=torch.arange(1, 0, -0.1))
1.5104
1.6955
2.4895
4.9185
4.9895
6.9155
7.3683
8.1836
8.7164
9.8916
Pytorch——张量 Tensors的更多相关文章
- pytorch张量数据索引切片与维度变换操作大全(非常全)
(1-1)pytorch张量数据的索引与切片操作1.对于张量数据的索引操作主要有以下几种方式:a=torch.rand(4,3,28,28):DIM=4的张量数据a(1)a[:2]:取第一个维度的前2 ...
- Pytorch 张量维度
Tensor类的成员函数dim()可以返回张量的维度,shape属性与成员函数size()返回张量的具体维度分量,如下代码定义了一个两行三列的张量: f = torch.randn(2, 3) pri ...
- PyTorch官方中文文档:torch
torch 包 torch 包含了多维张量的数据结构以及基于其上的多种数学操作.另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化. 它有CUDA 的对应实现,可以在NVIDIA ...
- 【pytorch】学习笔记(一)-张量
pytorch入门 什么是pytorch PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可以利用 GPU 的性能进行计算. 深度学习研究平台拥有足够 ...
- pytorch中tensor张量数据基础入门
pytorch张量数据类型入门1.对于pytorch的深度学习框架,其基本的数据类型属于张量数据类型,即Tensor数据类型,对于python里面的int,float,int array,flaot ...
- PyTorch 60 分钟入门教程:PyTorch 深度学习官方入门中文教程
什么是 PyTorch? PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可以利用 GPU 的性能进行计算. 深度学习研究平台拥有足够的灵活性和速度 ...
- 【PyTorch v1.1.0文档研习】60分钟快速上手
阅读文档:使用 PyTorch 进行深度学习:60分钟快速入门. 本教程的目标是: 总体上理解 PyTorch 的张量库和神经网络 训练一个小的神经网络来进行图像分类 PyTorch 是个啥? 这是基 ...
- PyTorch Tutorials 1 PyTorch是什么?
%matplotlib inline PyTorch是什么? 基于Python的科学计算包,服务于以下两种场景: 作为NumPy的替代品,可以使用GPU的强大计算能力 提供最大的灵活性和高速的深度学习 ...
- Task1.PyTorch的基本概念
1.什么是Pytorch,为什么选择Pytroch? PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Pyth ...
随机推荐
- 🏆【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全
前提概要 针对于后端开发者而言的,作为报表的导入和导出是一个很基础且有很棘手的问题!之前常用的工具和方案大概有这么几种: JXL(Java Excel API 工具服务),此种只支持xls的文件格式, ...
- iMX6UL配置MCP2515模块(SPI转CAN)——基于迅为iTOP-iMX6UL开发板
写在前面 在文章"嵌入式Linux的CAN总线配置--基于迅为iTOP-4412开发板"中我给4412开发板配置了SPI转CAN模块,使用的是不带设备树的内核.在本篇文章中,要 ...
- Docker(41)- Portainer 可视化面板安装
Portainer docker run -d -p 8080:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock ...
- 'Specifying a namespace in include() without providing an app_name '报错解决
需要在每个ap下面的url.py 加入一个指定app的名字 比如 user app 下的 url.py 文件加入: urlpatterns = []app_name = "user& ...
- kubectl工具的windows\linux安装方法
kubectl 安装 下载kubectl二进制文件 curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.10.0 ...
- STM32F103C8T6使用SPI接口驱动WS2812b灯条
之前一篇文章写了使用IO控制WS2812b操作原理,但是由于IO的输出比较慢,所以现在改用了硬件SPI控制WS2812b灯条 把SPI的mosi线接到ws2812b的数据线,SPI的速率可达十几Mbi ...
- POJ2251——Dungeon Master(三维BFS)
和迷宫问题区别不大,相比于POJ1321的棋盘问题,这里的BFS是三维的,即从4个方向变为6个方向. 用上队列的进出操作较为轻松. #include<iostream> #include& ...
- hadoop集群搭建详细教程
本文针对hadoop集群的搭建过程给予一个详细的介绍. 参考视频教程:https://www.bilibili.com/video/BV1tz4y127hX?p=1&share_medium= ...
- CentOS Linux 简单安装 clickhouse
本文只是仅仅的介绍安装 至于更多介绍请自信百度 1.本人 linux版本 [root@localhost /]# cat /etc/redhat-releaseCentOS Linux release ...
- Promise源码实现与测试
const PENDING = 'pending', FULFILLED = 'fulfilled', REJECTED = 'rejected' class MyPromise { construc ...