【PyTorch练习】tensor的一般计算;定义新的 Autograd 函数
参考网站:PyTorch官方文档:https://pytorch.apachecn.org/#/docs/1.7/11
文章目录
在看完文档之后,我们会觉得,虽然明白了,但是缺乏练习很容易忘记,因此做自己设计了一些练习来加深记忆,可以自己做下这些题目,做完基本也完全记住语法了,是很好的学习的手段,毕竟看了懂了和动手实践了,是两件事情。之后复习的时候,这些练习题也是很好的东西。(还给出了参考答案帮助复习,很贴心了是不是~)
tensor的一般操作
(1)输入为一个3*3的矩阵,这个矩阵需要先从一个列表开始变成tensor的形式,然后将这个tensor重写成为一个随机的tensor,之后利用形状的方式生成一个3 *3的矩阵,把这个矩阵利用矩阵乘法对于自身进行运算之后,叠到第一个矩阵后面
a = [[1,2,3],[2,3,5],[4,2,7]]
a = torch.tensor(a)
a = torch.rand_like(a,dtype = torch.float)
b = torch.rand((3,3,))
b = b @ b.T # b.matmul(b.T)
c = torch.cat([a,b],dim=1)
(2)输入为一个4* 4的矩阵,这个矩阵需要先从一个列表开始变成tensor的形式,然后将这个tensor重写成为一个全为1的tensor,之后使用直接定义形状的方式,建立一个4*4的随机张量,查看矩阵的数据类型,形状,存储方式等参数,和第一个tensor做乘法之后,完成张量转化到GPU运行
a = [[1,2,3,4],[5,2,1,8],[2,1,9,10],[3,2,1,6]]
a = torch.tensor(a)
a = torch.ones_like(a)
b = torch.rand((4,4))
print(b.dtype)
print(b.shape)
print(b.device)
b = b*a # b.mul(b)
if torch.cuda.is_available():
b = b.to("cuda")
重新定义Autograd完成计算
(3)自己定义一个函数(建议定义选自网络中有关的,比如和sigmoid函数),写一个类继承autograd中的函数方法,在类的内部重写函数的正向和反向传播(其实就是函数本身和函数的导数),应用这个类,完成用sigmoid和多项式的形式,对一个序列的拟合(这里是一个年份x和报废的情况,1为损坏,最后可以根据使用年限给出报废的概率)
这里的小提示就是,和变量有关的计算,要用torch.下面的,和math无关,不能混在一起的,还有变量也需要在同一个device和dtype下面一起运算(但是在初始化数据的时候可以用math来指定,这个是两个层面的事情)
import torch
# 基本都是固定的语法,定义好之后,torch框架可以帮助自动计算
class sigmoid(torch.autograd.Function):
@staticmethod
def forward(ctx,input):
ctx.save_for_backward(input)
return 1/(1+torch.exp(-input))
@staticmethod
def backward(ctx,grad_output):
input, = ctx.saved_tensors