时隔好几天,我又回来了

其实昨天晚上就想写博客的,但是有个东西一直没搞明白,弄到了十点才从实验室走,希望今天能把他搞明白。现在是2020/9/28 10:12,刚刚装好Redmi的显示器,真香。等等还要去上课的我(除了早上一二节没课,剩下的满课,呜呜呜),先随便写写了。(还有昨天LGD打得真菜,虽然我是一个打LOL不超过十局的人,但是我看了挺多比赛哈哈。

学了啥

首先就是eat pytorch in 20 days的进度了
时隔好几天,我又回来了

上一篇博客是day4,也就是1-4,截至昨天学到了day9,也就是3-2,但是中间还是有一些东西我还不是很理解的,等等会做个梳理。今天努力把day10的学完。不行了,先去上课了。


现在是16:54下课刚刚回来,到实验室,把这个写完再开始学习

问题1:backward()的反向传播机制

先上代码:
下面是标量反向传播

import numpy as np 
import torch 

# f(x) = a*x**2 + b*x + c的导数

x = torch.tensor(0.0,requires_grad = True) # x需要被求导
a = torch.tensor(1.0)
b = torch.tensor(-2.0)
c = torch.tensor(1.0)
y = a*torch.pow(x,2) + b*x + c 

y.backward()
# 这里没有传参数

dy_dx = x.grad
print(dy_dx)

接着的是非标量的反向传播

import numpy as np 
import torch 

# f(x) = a*x**2 + b*x + c

x = torch.tensor([[0.0,0.0],[1.0,2.0]],requires_grad = True) # x需要被求导
a = torch.tensor(1.0)
b = torch.tensor(-2.0)
c = torch.tensor(1.0)
y = a*torch.pow(x,2) + b*x + c 

gradient = torch.tensor([[1.0,1.0],[1.0,1.0]])

print("x:\n",x)
print("y:\n",y)
y.backward(gradient = gradient)
# 为什么这里需要传gradient参数

x_grad = x.grad
print("x_grad:\n",x_grad)

两个代码的对比,我不明白非标量为什么需要y.backward()中需要传gradient这个参数,并且不清楚这个参数的作用。最后在某篇博文找到了答案

链式求导法则,本质上是求解y的各分量对自变量的导数,然后乘上y对自己分量的梯度。其实这里的1.0可以理解成y对y求导,其结果是1.0。如果把这个tensor改成0.2或者2.3等等的数字,那相当于是这样子的效果。

  •  **A = 0.2y[0] + 2.3y[1]** 
    

顺便留两张向量,矩阵求导的公式
时隔好几天,我又回来了

时隔好几天,我又回来了


问题2:torch.autograd.Function的理解

说是Function的理解,其实是Function的新旧版本实例化方式。

a = F.apply(args)
f = F()
a = f(args)

的区别
第一块代码是新版本的实例化方式,第二块代码是旧版的。我犯的错误是用旧版本的去实例化新版本的class,就发生了报错。因为新旧版本的class写法是不一样的。具体看这个链接

问题3:是关于python的,先上代码

print(X)
print(torch.squeeze(model.forward(X)>=0.5))
print(torch.squeeze(model.forward(X)<0.5))
temp1 = X[torch.squeeze(model.forward(X)>=0.5)]
temp2 = X[torch.squeeze(model.forward(X)<0.5)]
print(temp1)
print(temp2)
print(X.shape)
print(temp1.shape)
print(temp2.shape)

下面是代码的结果
时隔好几天,我又回来了

一直弄不明白X的下标取True or False的时候,会得到什么,最后只要打印出来,看结果是mask,但是我也不是很确定,但目前还没找到答案。

结束啦

今天就到这里吧,虽然说买了显示器,但是我的电脑是超极本,转接口还没到,还是智能看着这个13寸的小屏幕写博客,呜呜呜。其实它中午的时候到菜鸟驿站了,但是因为上课没法去拿,等等去拿一下,然后给大家上个照片hhh

上一篇:自动求梯度 - 基于 PyTorch


下一篇:【学习笔记】Pytorch深度学习—优化器(二)