torch 包含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。
import torch
设置打印选项
torch.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, profile=None)
a = torch.rand(100,100)
a
只会输出一部分数据
torch.set_printoptions(precision=10)
a
输出全部数据
返回一个2维张量,对角线位置全1,其它位置全0
torch.eye(4)
tensor([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
import numpy as np
a = np.array([1,2,3,4,5,6])
a
array([1, 2, 3, 4, 5, 6])
#方法一
tensor_a = torch.tensor(a)
tensor_a
tensor([1, 2, 3, 4, 5, 6], dtype=torch.int32)
tensor_a[0] = -1
a
array([1, 2, 3, 4, 5, 6])
b = np.array([1,2,3,4,5,6])
b
array([1, 2, 3, 4, 5, 6])
torch.from_numpy将numpy.ndarray 转换为pytorch的 Tensor。 返回的张量tensor和numpy的ndarray共享同一内存空间。**修改一个会导致另外一个也被修改。**返回的张量不能改变大小。
#方法二
tensor_b = torch.from_numpy(b)
tensor_b
tensor([1, 2, 3, 4, 5, 6], dtype=torch.int32)
tensor_b[0] = -1
b
array([-1, 2, 3, 4, 5, 6])
返回一个1维张量,包含在区间start 和 end 上均匀间隔的steps个点。 输出1维张量的长度为steps。
torch.linspace(1,5,steps = 10)
tensor([1.0000000000, 1.4444444180, 1.8888888359, 2.3333334923, 2.7777776718,
3.2222223282, 3.6666665077, 4.1111111641, 4.5555553436, 5.0000000000])
返回一个1维张量,包含在区间 1 0 s t a r t 10^{start} 10start和 1 0 e n d 10^{end} 10end上以对数刻度均匀间隔的steps个点。 输出1维张量的长度为steps。
torch.logspace(1,8,steps = 3)
tensor([ 10.0000000000, 31622.7773437500, 100000000.0000000000])
返回一个全为1 的张量,形状由可变参数sizes定义。
torch.ones(3,5)
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
返回一个张量,包含了从区间[0,1)的均匀分布中抽取的一组随机数,形状由可变参数sizes 定义。
torch.rand(4)
tensor([0.2573032379, 0.2179149985, 0.4656094313, 0.0828071833])
torch.rand(5, 3)
tensor([[0.7632396221, 0.0302500725, 0.6429942846],
[0.2644285560, 0.1896467209, 0.4061338902],
[0.6657168269, 0.1425771117, 0.5113636851],
[0.9372168183, 0.7655946612, 0.1887679100],
[0.3604329824, 0.9002583623, 0.0541984439]])
返回一个张量,包含了从标准正态分布(均值为0,方差为 1,即高斯白噪声)中抽取一组随机数
torch.randn(2,3)
tensor([[-0.3220688105, -1.0411276817, -0.0246272516],
[ 0.2796218097, -0.4497807026, -0.0062698554]])
给定参数n,返回一个从0 到n -1 的随机整数排列。
torch.randperm(8)
tensor([6, 3, 5, 7, 4, 2, 0, 1])
返回一个1维张量,长度为 floor((end−start)/step)。包含从start到end,以step为步长的一组序列值(默认步长为1)。
torch.arange(1,10)
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.arange(1,10,3)
tensor([1, 4, 7])
返回一个全为标量 0 的张量,形状由可变参数sizes 定义。
torch.zeros(2, 13)
tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
a = torch.tensor([1,2,3,4,5,6,7,8,9])
a
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.split(a,2)
(tensor([1, 2]), tensor([3, 4]), tensor([5, 6]), tensor([7, 8]), tensor([9]))
torch.split(a,[2,3,4])
(tensor([1, 2]), tensor([3, 4, 5]), tensor([6, 7, 8, 9]))
torch.cat()可以看做 torch.split() 和 torch.chunk()的反操作
a = torch.tensor([[1,2,3],[3,3,1]])
a
tensor([[1, 2, 3],
[3, 3, 1]])
b = torch.tensor([[11,22,3],[7,3,2]])
b
tensor([[11, 22, 3],
[ 7, 3, 2]])
torch.cat((a,b),0)
tensor([[ 1, 2, 3],
[ 3, 3, 1],
[11, 22, 3],
[ 7, 3, 2]])
torch.cat((a,b),1)
tensor([[ 1, 2, 3, 11, 22, 3],
[ 3, 3, 1, 7, 3, 2]])
返回输入矩阵input的转置
a = torch.tensor([[1,2],[3,4]])
a
tensor([[1, 2],
[3, 4]])
torch.transpose(a,0,1)
tensor([[1, 3],
[2, 4]])
torch.transpose(a,1,0)
tensor([[1, 3],
[2, 4]])
a.T
tensor([[1, 3],
[2, 4]])
设置CPU生成随机数的种子,方便下次复现实验结果。
为 CPU 设置 种子 用于生成随机数,以使得结果是确定的。
当你设置一个随机种子时,接下来的随机算法生成数根据当前的随机种子按照一定规律生成。
随机种子作用域是在设置时到下一次设置时。要想重复实验结果,设置同样随机种子即可。
# 设定生成随机数的种子,并返回一个 torch._C.Generator 对象。
torch.manual_seed(seed)
# 返回生成随机数的原始种子值
torch.initial_seed()
# 从伯努利分布中抽取二元随机数(0 或者 1)。
torch.bernoulli
计算输入张量的每个元素绝对值
a = torch.tensor([[-1,2],[-3,-4]])
torch.abs(a)
tensor([[1, 2],
[3, 4]])
对输入张量input逐元素加上标量值value,并返回结果到一个新的张量out,即 out=tensor+value。
a = torch.tensor([[-1,2],[-3,-4]])
torch.add(a,10)
tensor([[ 9, 12],
[ 7, 6]])
将input逐元素除以标量值value,并返回结果到输出张量out。 即 out=tensor/value
返回一个新张量,包含输入input张量每个元素的指数。
返回一个新张量,包含输入input张量每个元素的floor,即不小于元素的最大整数。
用标量值value乘以输入input的每个元素,并返回一个新的结果张量。 out=tensor∗value
对输入input的按元素求exponent次幂值,并返回结果张量。 幂值exponent 可以为单一 float 数或者与input相同元素数的张量。
返回一个新张量,将输入input张量每个元素舍入到最近的整数。
返回一个新张量,包含输入input张量每个元素的sigmoid值。
返回一个新张量,包含输入input张量每个元素的平方根。
返回输入张量所有元素的均值。
返回输入张量给定维度每行的中位数,同时返回一个包含中位数的索引的LongTensor。
如果两个张量有相同的形状和元素值,则返回True ,否则 False。
返回输入张量所有元素的最大值。
返回输入张量所有元素的最小值。
torch.Tensor
是一种包含单一数据类型元素的多维矩阵。
Torch定义了七种CPU tensor类型和八种GPU tensor类型:
Data tyoe | CPU tensor | GPU tensor |
---|---|---|
32-bit floating point | torch.FloatTensor | torch.cuda.FloatTensor |
64-bit floating point | torch.DoubleTensor | torch.cuda.DoubleTensor |
16-bit floating point | N/A | torch.cuda.HalfTensor |
8-bit integer (unsigned) | torch.ByteTensor | torch.cuda.ByteTensor |
8-bit integer (signed) | torch.CharTensor | torch.cuda.CharTensor |
16-bit integer (signed) | torch.ShortTensor | torch.cuda.ShortTensor |
32-bit integer (signed) | torch.IntTensor | torch.cuda.IntTensor |
64-bit integer (signed) | torch.LongTensor | torch.cuda.LongTensor |
torch.Tensor
是默认的tensor类型(torch.FlaotTensor
)的简称。