pytorch

一、创建张量

由数组创建张量
arr = [1,3,4,9]
t = torch.tensor(arr)

由numpy创建张量
arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)

创建3x3全为0的张量
t = torch.zeros((3, 3), out=out_t)

创建形状与arr相同的全为0的张量
arr = torch.tensor([[2,4,3],[5,3,4]])
t = torch.zeros_like(arr)

创建全为1的3x3张量
t = torch.full((3, 3), 1)210创建张量,步长为2
t = torch.arange(2, 10, 2)

创建210张量,均分6份
t = torch.linspace(2, 10, 6)

创建3阶单位矩阵
t = torch.eye(3)

创建4x5张量,全部元素服从均值为1,方差为2正态分布
t = torch.normal(1, 2, [4,5], generator=None, out=None)

创建3x4张量,全部元素服从标准正态分布
t = torch.randn([3,4])

创建3x4张量,全部元素服从均匀分布,取值0~1
t = torch.rand([3,4])

创建3x4张量,全部元素服从均匀分布,取值2~85
t = torch.randint(2,85,[3,4])

二、张量操作

维度0上将两个张量拼接
t1 = torch.cat([a1, a2], dim = 0)

把张量在维度1上均分为3份
t1 = torch.chunk(a1, 3, dim=1)

把张量在维度0上分为两份,一份长度2,另一份0
t1 = torch.split(a1, [2,1], dim=0)

把张量在维度0上取出索引为02两个张量
a2 = torch.tensor([0,2])
t1 = torch.index_select(a1, 0, index=a2, out=None)

改变张量形状为91列
t1 = torch.reshape(a1, (9, 1))

三、张量运算

张量加减乘除
t1 = torch.add(a1, a2)
t1 = torch.sub(a1, a2)
t1 = torch.mul(a1, a2)
t1 = torch.div(a1, a2)

x张量的n次方
torch.pow(x, n)

x张量的绝对值
torch.abs(x)

x张量取负数
torch.neg(x)

x张量取倒数
torch.reciprocal(x) 

x张量取平均数
torch.mean(x) 
 
x张量取sigmoid
torch.sigmoid(x) 

x张量总数
torch.sum(x)

x张量最大值
torch.max(x) 

x张量最小值
torch.min(x) 

x张量最上取整数
torch.ceil(x) 

x张量以e为底数,计算指数
torch.exp(x) 

四、线性代数

矩阵点积
t1 = torch.dot(a1, a2)

矩阵与向量相乘
a1 = torch.tensor([[1, 2],[4, 5]])
a2 = torch.tensor([7, 8])
t1 = torch.mv(a1, a2)

矩阵相乘
a1 = torch.tensor([[1, 2],[4, 5]])
a2 = torch.tensor([[7, 8],[6, 9]])
t1 = torch.mm(a1, a2)

求矩阵a1特征值和特征向量
a1 = torch.tensor([[1., 2.],[4., 5.]])
t1 = torch.eig(a1, eigenvectors=True)

求矩阵a1逆矩阵
a1 = torch.tensor([[1., 2.],[4., 5.]])
t1 = torch.inverse(a1)

向量a1单位化
a1 = torch.tensor([[0., -1., -1.]],dtype=torch.float64)
torch.nn.functional.normalize(a1)

五、求梯度

import torch

w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)

a.retain_grad()    #非叶子节点,保留梯度用retain_grad()
b.retain_grad()    #非叶子节点,保留梯度用retain_grad()

y.backward()       # y 求导
#y.backward(retain_graph=True)     保留计算图,用于多次求导

print(a.grad)       # 查看 a 梯度     
print(b.grad)       # 查看 b 梯度
print(w.grad)       # 查看 w 梯度,叶子节点直接查看梯度

w.grad.zero_()       # 梯度清零

自动求导

x = torch.tensor([3.], requires_grad=True)
y = torch.tensor([5.], requires_grad=True)
a = torch.add(x, y)
b = torch.mul(x, y)
z = torch.pow(a, b) 

grad_1 = torch.autograd.grad(z, [x,y,a,b], create_graph=True)

print(grad_1)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值