tensor-张量

在PyTorch中,张量Tensor是最基础的运算单位,与NumPy中的NDArray类似,张量表示的是一个多维矩阵。我的理解是tensor是一种数据结构,一种可以适用于GPU计算的数据结构。由于深度学习一般使用GPU进行计算,而传统的numpy的NDarray数据结构不能适用于GPU计算。

1,直接创建(其实我的理解是 想要创建一个什么变量 直接写入t.tensor()里面 不要太纠结tensor会怎么样 )

import torch as t

x = t.tensor(3)  #这里我觉得等价于 x = 3 只是x的数据类型会不一样 但是数据值是一样的
y = t.tensor([[1,2,3],[4,5,6]])#同理 这里等价于 y = [[1,2,3],[4,5,6]] 但y的数据类型不一样

print(x)
print(y)

运行结果:
tensor(3)
tensor([[1, 2, 3],
        [4, 5, 6]])

2,将numpy类型的数据转化为tensor

直接使用 torch.from_numpy(ndarry)

注意:生成返回的tensor会和ndarry共享数据,任何对tensor的操作都会影响到ndarry, 反之亦然

import torch as t
import numpy
x = numpy.array([[2,3],[4,5]])
print(type(x))
print(x)
y = t.from_numpy(x)
print(type(y))
print(y)
x[0,0] = 1#将数组第一个元素修改为1
print("将数组第一个元素进行修改后:")
print("x = ",x)
print("y = ",y)#虽然没有修改y的值 但这里y还是跟x一样修改了第一个元素

运行结果:
<class 'numpy.ndarray'>
[[2 3]
 [4 5]]
<class 'torch.Tensor'>
tensor([[2, 3],
        [4, 5]], dtype=torch.int32)
将数组第一个元素进行修改后:
x =  [[1 3]
 [4 5]]
y =  tensor([[1, 3],
        [4, 5]], dtype=torch.int32)

3,tensor其他内置函数

  • torch.empty(size)返回形状为size的空tensor
  • torch.zeros(size)返回形状为size 值为0的tensor
  • torch.zeros_like(input)返回跟input的tensor一个size的全零tensor
  • torch.ones(size)全部是1的tensor
  • torch.ones_like(input)返回跟input的tensor一个size的全一tensor
  • torch.arange(start=0, end, step=1)返回一个从start到end的序列,可以只输入一个end参数,就跟python的range()一样了。实际上PyTorch也有range(),但是这个要被废掉了,替换成arange了
  • torch.rand(size):返回一个张量,包含了从区间[0,1)的均匀分布中抽取一组随机数,形状由可变参数size定义。
  • torch.randn(size) 返回包含了从标准正态分布(0,1)中抽取一组随机数,形状由可变参数sizes定义。

4,list、numpy与tensor之间的转换 

import torch as t
import numpy

x = t.ones(3)#创建一个3个1的tensor
print(type(x))
print(x)

y = x.numpy()#转化为numpy
print(type(y))
print(y)

z = x.tolist()#转化为list
print(type(z))
print(z)

运行结果:
<class 'torch.Tensor'>
tensor([1., 1., 1.])
<class 'numpy.ndarray'>
[1. 1. 1.]
<class 'list'>
[1.0, 1.0, 1.0]

5,tensor的运算

注意:当对两个形状不同的Tensor按元素运算时,可能会触发广播机制(broadcasting)机制:先适当复制元素使这两个Tensor形状相同后再按元素运算。

加、减法与其他类型是一致的 直接使用+ - 运算符就行

pytorch提供了多维矩阵的乘法

t.mul(input, other, out=None):矩阵乘以一个数

t.matmul(mat, mat, out=None):矩阵相乘

t.mm(mat, mat, out=None):基本上等同于 matmul

其他运算:

t.div(input, other, out=None):除法

t.pow(input, other, out=None):指数

t.sqrt(input, out=None):开方

t.round(input, out=None):四舍五入到整数

t.abs(input, out=None):绝对值

t.ceil(input, out=None):向上取整

t.clamp(input, min, max, out=None):把 input 规范在 min 到 max 之间,超出用 min 和 max 代替,可理解为削尖函数

t.argmax(input, dim=None, keepdim=False):返回指定维度最大值的索引

参考链接:深度学习基础之三分钟轻松搞明白tensor到底是个啥 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值