PyTorch 的 Autograd
PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里?我觉得一是 PyTorch 提供了自动求导机制,二是对 GPU 的支持。由此可见,自动求导 (autograd) 是 PyTorch,乃至其他大部分深度学习框架中的重要组成部分。
了解自动求导背后的原理和规则,对我们写出一个更干净整洁甚至更高效的 PyTorch 代码是十分重要的。但是,现在已经有了很多封装好的 API,我们在写一个自己的网络的时候,可能几乎都不用去注意求导这些问题,因为这些 API 已经在私底下处理好了这些事情。现在我们往往只需要,搭建个想要的模型,处理好数据的载入,调用现成的 optimizer 和 loss function,直接开始训练就好了。仔细一想,连需要设置 requires_grad = True
的地方好像都没有。有人可能会问,那我们去了解自动求导还有什么用啊?
原因有很多,可以帮我们更深入地了解 PyTorch 这些宽泛的理由我就不说了,我举一个例子:当我们想使用一个 PyTorch 默认中并没有的 loss function 的时候,比如目标检测模型 YOLO 的 loss,我们可能就得自己去实现。如果我们不熟悉基本的 PyTorch 求导机制的话,对于实现过程中比如 tensor 的 in-place 操作等等很容易出错,导致需要话很长时间去 debug,有的时候即使定位到了错误的位置,也不知道如何去修改。相反,如果我们理清楚了背后的原理,我们就能很快地修改这些错误,甚至根本不会去犯这些错误。鉴于现在官方支持的 loss function 并不多,而且深度学习领域日新月异,很多新的效果很好的 loss function 层出不穷,如果要用的话可能需要我们自己来实现。基于这个原因,我们了解一下自动求导机制还是很有必要的。
本文所有代码例子都基于 Python3 和 PyTorch 1.1, 也就是不会涉及 0.4 以前的 Variable 这个数据结构。在文章中我们不会去分析一些非常底层的代码,而是通过一系列实例来理解自动求导机制。在举例的过程中我尽量保持场景的一致性,不用每个例子都需要重新了解假定的变量。如果发现文章中有错误或者没有讲清楚的地方,欢迎大家在评论区指正或讨论。
计算图
首先,我们先简单地介绍一下什么是计算图(Computational Graphs),以方便后边的讲解。假设我们有一个复杂的神经网络模型,我们把它想象成一个错综复杂的管道结构,不同的管道之间通过节点连接起来,我们有一个注水口,一个出水口。我们在入口注入数据的之后,数据就沿着设定好的管道路线缓缓流动到出水口,这时候我们就完成了一次正向传播。想象一下输入的 tensor 数据在管道中缓缓流动的场景,这就是为什么 TensorFlow 叫 TensorFlow 的原因!emmm,好像走错片场了,不过计算图在 PyTorch 中也是类似的。至于这两个非常有代表性的深度学习框架在计算图上有什么区别,我们待会再说。
计算图通常包含两种元素,一个是 tensor,另一个是 Function。张量 tensor 不必多说,但是大家可能对 Function 比较陌生。这里 Function 指的是在计算图中某个节点(node)所进行的运算,比如加减乘除卷积等等之类的,Function 内部有 forward()
和 backward()
两个方法,分别应用于正向、反向传播。
a = torch.tensor(2.0, requires_grad=True)
b = a.exp()
print(b)
# tensor(7.3891, grad_fn=<ExpBackward>)
- 1
- 2
- 3
- 4
在我们做正向传播的时候,需要求导的变量除了执行 forward()
操作之外,还会同时会为反向传播做一些准备,为反向计算图添加一个 Function 节点。在上边这个例子中,变量 b
在反向传播中需要进行的操作是 ExpBackward
。
一个具体的例子
了解了基础知识之后,现在我们来看一个具体的计算例子,并画出它的正向和反向计算图。假如我们需要计算这么一个模型:
l1 = input x w1
l2 = l1 + w2
l3 = l1 x w3
l4 = l2 x l3
loss = mean(l4)
- 1
- 2
- 3
- 4
- 5
这个例子比较简单,涉及的最复杂的操作是求平均,但是如果我们把其中的加法和乘法操作换成卷积,那么其实和神经网络类似。我们可以简单地画一下它的计算图:
下面给出了对应的代码,我们定义了input
,w1
,w2
,w3
这三个变量,其中 input
不需要求导结果。根据默认规则,对于 l1
来说,因为输入中有一个需要求导(也就是 w1
),所以它自己也需要求导,即 requires_grad=True
(如果对这个规则不熟悉,欢迎参考 我上一篇博文的第一部分 或者直接查看 官方 Tutorial 相关部分)。在整张计算图中,只有 input
一个变量是不需要求导的。正向传播过程的具体代码如下:
input = torch.ones([2, 2], requires_grad=False)
w1 = torch.tensor(2.0, requires_grad=True)
w2 = torch.tensor(3.0, requires_grad=True)
w3 = torch.tensor(4.0, requires_grad=True)
l1 = input w1
l2 = l1 + w2
l3 = l1 w3
l4 = l2 * l3
loss = l4.mean()
print(w1.data, w1.grad, w1.grad_fn)
# tensor(2.) None None
print(l1.data, l1.grad, l1.grad_fn)
# tensor([[2., 2.],
# [2., 2.]]) None <MulBackward0 object at 0x000001EBE79E6AC8>
print(loss.data, loss.grad, loss.grad_fn)
# tensor(40.) None <MeanBackward0 object at 0x000001EBE79D8208>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
正向传播的结果基本符合我们的预期。我们可以看到,变量 x1
的 grad_fn
储存着乘法操作符 <MulBackward0>
,用于在反向传播中指导导数的计算;因为 w1
是用户自己定义的,不是通过计算得来的,所以其 grad_fn
为空,同时因为没有进行反向传播,grad
的值也为空。接下来,我们看一下如果要继续进行反向传播,计算图应该是什么样子:
反向图也比较简单,从 loss
这个变量开始,通过链式法则,依次计算出各部分的导数。接下来我们继续运行代码:
loss.backward()
print(w1.grad, w2.grad, w3.grad)
# tensor(28.) tensor(8.) tensor(10.)
print(l1.grad, l2.grad, l3.grad, l4.grad, loss.grad)
# None None None None None
- 1
- 2
- 3
- 4
- 5
- 6
等等,这个输出好像和我们的预期不大一样。为什么 l1
,l2
,l3
这些求导结果都为空呢?想要解答这个问题,我们得明白什么是叶子张量。
叶子张量
对于任意一个张量来说,我们可以用 tensor.is_leaf
来判断它是否是叶子张量(leaf tensor)。在反向传播过程中,只有 is_leaf=True
的时候,需要求导的张量的导数结果才会被最后保留下来。
对于 requires_grad = False
的 tensor 来说,我们约定俗成地把它们归为叶子张量。但其实无论如何划分都没有影响,因为张量的 is_leaf
属性只有在需要求导的时候才有意义。
我们真正需要注意的是当 requires_grad = True
的时候,如何判断是否是叶子张量:当这个 tensor 是用户创建的时候,它是一个叶子节点,当这个 tensor 是由其他运算操作产生的时候,它就不是一个叶子节点。我们来看个例子:
a = torch.ones([2, 2], requires_grad=True)
print(a.is_leaf)
# True
b = a + 2
print(b.is_leaf)
# False
# 因为 b 不是用户创建的,是通过计算生成的
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
这时有同学可能会问了,为什么要搞出这么个叶子张量的概念出来?原因是为了节省内存(或显存)。我们来想一下,那些非叶子结点,是通过用户所定义的叶子节点的一系列运算生成的,也就是这些非叶子节点都是中间变量,一般情况下,用户不会去使用这些中间变量的导数,所以为了节省内存,它们在用完之后就被释放了。
我们回头看一下之前的反向传播计算图,在图中的叶子节点我用绿色标出了。可以看出来,被叫做叶子,可能是因为漂浮在主干之外,没有子节点,因为它们都是被用户创建的,不是通过其他节点生成。
我们有办法保留中间变量的导数吗?当然有,通过使用 retain_grad()
就可以:
# 和前边一样
# ...
loss = l4.mean()
l1.retain_grad()
l4.retain_grad()
loss.retain_grad()
loss.backward()
print(loss.grad)
# tensor(1.)
print(l4.grad)
# tensor([[0.2500, 0.2500],
# [0.2500, 0.2500]])
print(l1.grad)
# tensor([[7., 7.],
# [7., 7.]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
如果我们只是想进行 Debug,只需要输出中间变量的导数信息,而不需要保存他们,我们还可以使用 tensor.register_hook
,例子如下:
# 和前边一样
# ...
loss = l4.mean()
l1.register_hook(lambda grad: print('l1 grad: ', grad))
l4.register_hook(lambda grad: print('l4 grad: ', grad))
loss.register_hook(lambda grad: print('loss grad: ', grad))
loss.backward()
# loss grad: tensor(1.)
# l4 grad: tensor([[0.2500, 0.2500],
# [0.2500, 0.2500]])
# l1 grad: tensor([[7., 7.],
# [7., 7.]])
print(loss.grad)
# None
# loss 的 grad 在 print 完之后就被清除掉了
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
这个函数的功能远远不止打印导数信息用以 debug 哦,但是一般很少用,所以这里就不扩展了,更多请参考知乎提问 pytorch中的钩子(Hook)有何作用?
到此为止,我们已经讨论完了这个实例中的正向传播和反向传播的有关内容了。回过头来看, input 其实很像神经网络输入的图像,w1, w2, w3 则类似卷积核的参数,而 l1, l2, l3, l4 可以表示4个卷积层输出,如果我们把节点上的加法乘法换成卷积操作的话。实际上这个简单的模型,很像我们平时的神经网络的简化版,通过这个例子,相信大家多少也能对神经网络的正向和反向传播过程有个大致的了解了吧。
inplace 操作
现在我们来看一下本篇的重点,inplace operation。可以说,我们求导时候大部分的 bug,都出在使用了 inplace 操作上。现在我们以报错的内容做驱动,来讲一讲 inplace 操作吧。第一个报错信息:
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: balabala...
- 1
不少人可能会感到很熟悉,没错,我就是其中之一。之前写代码的时候竟经常报这个错,原因是对 inplace 操作不了解。要搞清楚为什么会报错,我们先来了解一下什么是 inplace 操作:inplace 指的是在不更改变量的内存地址的情况下,直接修改变量的值。我们来看两种情况,大家觉得这两种情况哪个是 inplace 操作,哪个不是?或者两个都是 inplace?
# 情景 1
a = a.exp()
# 情景 2
a[0] = 10
- 1
- 2
- 3
- 4
- 5
答案是:情景1不是 inplace,类似 Python 中的 i=i+1
, 而情景2是 inplace 操作,类似 i+=1
。依稀记得当时做机器学习的大作业,很多人都被其中一个 i+=1
和 i=i+1
问题给坑了好长时间。不相信?那我们来实际测试一下呗:
# 我们要用到 id() 这个函数,其返回值是对象的内存地址
# 情景 1
a = torch.tensor([3.0, 1.0])
print(id(a)) # 2112716404344
a = a.exp()
print(id(a)) # 2112715008904
# 在这个过程中 a.exp() 生成了一个新的对象,然后再让 a
# 指向它的地址,所以这不是个 inplace 操作
# 情景 2
a = torch.tensor([3.0, 1.0])
print(id(a)) # 2112716403840
a[0] = 10
print(id(a), a) # 2112716403840 tensor([10., 1.])
# inplace 操作,内存地址没变
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
PyTorch 是怎么检测 tensor 发生了 inplace 操作呢?答案是通过 tensor._version
来检测的。我们还是来看个例子:
a = torch.tensor([1.0, 3.0], requires_grad=True)
b = a + 2
print(b._version) # 0
loss = (b * b).mean()
b[0] = 1000.0
print(b._version) # 1
loss.backward()
# RuntimeError: …
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
每次 tensor 在进行 inplace 操作事,变量 _version
就会加1,其初始值为0。在正向传播过程中,求导系统记录的 b
的 version 是0,但是在进行反向传播的过程中,求导系统发现 b
的 version 变成1了,所以就会报错了。但是还有一种特殊情况不会报错,就是反向传播求导的时候如果没用到 b
的值(比如 y = x + 1
, y 关于 x 的导数是1,和 x 无关),自然就不会去对比 b
前后的 version 了,所以不会报错。
上边我们所说的情况是针对非叶子节点的,对于 requires_grad=True
的叶子节点来说,要求更加严格了,甚至在叶子节点被使用之前修改它的值都不行。我们来看一个报错信息:
RuntimeError: leaf variable has been moved into the graph interior
- 1
这个意思通俗一点说就是你的一顿 inplace 操作把一个叶子节点变成了非叶子节点了。我们知道,非叶子节点的导数在默认情况下是不会被保存的,这样就会出问题了。举个小例子:
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
print(a, a.is_leaf)
# tensor([10., 5., 2., 3.], requires_grad=True) True
a[:] = 0
print(a, a.is_leaf)
# tensor([0., 0., 0., 0.], grad_fn=<CopySlices>) False
loss = (a*a).mean()
loss.backward()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
我们看到,在进行对 a
的重新 inplace 赋值之后,表示了 a 是通过 copy operation 生成的,grad_fn
都有了,所以自然而然不是叶子节点了。本来是该有导数值保留的变量,现在成了导数会被自动释放的中间变量了,所以 PyTorch 就给你报错了。还有另外一种情况:
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
a.add_(10.) # 或者 a += 10.
# RuntimeError: a leaf Variable that requires grad has been used in an in-place operation.
- 1
- 2
- 3
这个更厉害了,不等到你调用 backward,只要你对需要求导的叶子张量使用了这些操作,马上就会报错。那是不是需要求导的叶子节点一旦被初始化赋值之后,就不能修改它们的值了呢?我们如果在某种情况下需要重新对叶子变量赋值该怎么办呢?有办法!
# 方法一
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
print(a, a.is_leaf, id(a))
# tensor([10., 5., 2., 3.], requires_grad=True) True 2501274822696
a.data.fill_(10.)
# 或者 a.detach().fill_(10.)
print(a, a.is_leaf, id(a))
# tensor([10., 10., 10., 10.], requires_grad=True) True 2501274822696
loss = (a*a).mean()
loss.backward()
print(a.grad)
# tensor([5., 5., 5., 5.])
# 方法二
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
print(a, a.is_leaf)
# tensor([10., 5., 2., 3.], requires_grad=True) True
with torch.no_grad():
a[:] = 10.
print(a, a.is_leaf)
# tensor([10., 10., 10., 10.], requires_grad=True) True
loss = (a*a).mean()
loss.backward()
print(a.grad)
# tensor([5., 5., 5., 5.])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
修改的方法有很多种,核心就是修改那个和变量共享内存,但 requires_grad=False
的版本的值,比如通过 tensor.data
或者 tensor.detach()
(至于这二者更详细的介绍与比较,欢迎参照我 上一篇文章的第四部分)。我们需要注意的是,要在变量被使用之前修改,不然等计算完之后再修改,还会造成求导上的问题,会报错的。
为什么 PyTorch 的求导不支持绝大部分 inplace 操作呢?从上边我们也看出来了,因为真的很 tricky。比如有的时候在一个变量已经参与了正向传播的计算,之后它的值被修改了,在做反向传播的时候如果还需要这个变量的值的话,我们肯定不能用那个后来修改的值吧,但没修改之前的原始值已经在内存被释放掉了,我们怎么办?一种可行的办法就是我们在 Function 做 forward 的时候每次都开辟一片空间储存当时输入变量的值,这样无论之后它们怎么修改,都不会影响了,反正我们有备份在存着。但这样有什么问题?这样会导致内存(或显存)使用量大大增加。因为我们不确定哪个变量可能之后会做 inplace 操作,所以我们每个变量在做完 forward 之后都要被储存一个备份,成本太高了。除此之外,inplace operation 还可能造成很多其他求导上的问题。
总之,我们在实际写代码的过程中,没有必须要用 inplace operation 的情况,而且支持它会带来很大的性能上的牺牲,所以 PyTorch 不推荐使用 inplace 操作,当求导过程中发现有 inplace 操作影响求导正确性的时候,会采用报错的方式提醒。但这句话反过来说就是,因为只要有 inplace 操作不当就会报错,所以如果我们在程序中使用了 inplace 操作却没报错,那么说明我们最后求导的结果是正确的,没问题的。
动态图,静态图
可能大家都听说过,PyTorch 使用的是动态图(Dynamic Computational Graphs)的方式,而 TensorFlow 使用的是静态图(Static Computational Graphs)。所以二者究竟有什么区别呢,我们本节来就来讨论这个事情。
所谓动态图,就是每次当我们搭建完一个计算图,然后在反向传播结束之后,整个计算图就在内存中被释放了。如果想再次使用的话,必须从头再搭一遍,参见下边这个例子。而以 TensorFlow 为代表的静态图,每次都先设计好计算图,需要的时候实例化这个图,然后送入各种输入,重复使用,只有当会话结束的时候创建的图才会被释放(不知道这里我对 tf.Session 的理解对不对,如果有错误希望大佬能指正一下),就像我们之前举的那个水管的例子一样,设计好水管布局之后,需要用的时候就开始搭,搭好了就往入口加水,什么时候不需要了,再把管道都给拆了。
# 这是一个关于 PyTorch 是动态图的例子:
a = torch.tensor([3.0, 1.0], requires_grad=True)
b = a * a
loss = b.mean()
loss.backward() # 正常
loss.backward() # RuntimeError
# 第二次:从头再来一遍
a = torch.tensor([3.0, 1.0], requires_grad=True)
b = a * a
loss = b.mean()
loss.backward() # 正常
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
从描述中我们可以看到,从理论上来说,静态图在效率上比动态度高。因为首先,静态图只用构建一次,然后之后重复使用就可以了;其次静态图因为是固定不需要改变的,所以在设计完了计算图之后,可以进一步的优化,比如可以将用户原本定义的 Conv 层和 ReLU 层合并成 ConvReLU 层,提高效率。
但是,深度学习框架的速度不仅仅取决于图的类型,还很其他很多因素,比如底层代码质量,所使用的底层 Blas 库等等等都有关。从实际测试结果来说,至少在主流的模型的训练时间上,PyTorch 有着至少不逊于动态图框架 Caffe,TensorFLow 的表现。具体对比数据可以参考 这个 GitHub 仓库。
大家不要急着纠正我,我知道,我现在就说:当然,在 9102 年的今天,动态图和静态图直接的界限已经开始慢慢模糊。PyTorch 模型转成 Caffe 模型越来越方便,而 TensorFlow 也加入了一些动态图机制。
除了动态图之外,PyTorch 还有一个特性,叫 eager execution。意思就是当遇到 tensor 计算的时候,马上就回去执行计算,也就是,实际上 PyTorch 根本不会去构建正向计算图,而是遇到操作就执行。真正意义上的正向计算图是把所有的操作都添加完,构建好了之后,再运行神经网络的正向传播。
正是因为 PyTorch 的两大特性:动态图和 eager execution,所以它用起来才这么顺手,简直就和写 Python 程序一样舒服,debug 也非常方便。除此之外,我们从之前的描述也可以看出,PyTorch 十分注重占用内存(或显存)大小,没有用的空间释放很及时,可以很有效地利用有限的内存。
总结
本篇文章主要讨论了 PyTorch 的 Autograd 机制和使用 inplace 操作可能会造成的各种报错。在实际写代码的过程中,涉及需要求导的部分,不建议大家使用 inplace 操作。除此之外我们还比较了动态图和静态图框架,PyTorch 作为动态图框架的代表之一,对初学者非常友好,而且运行速度上不逊于静态图框架,再加上现在通过 ONNX 转换为其他框架的模型用以部署也越来越方便,我觉得是一个非常好的深度学习工具。
最后,感谢阅读,希望大家读完之后能有所收获。
参考资料
- PyTorch Docs: AUTOGRAD MECHANICS
- YouTube英文视频:PyTorch Autograd Explained - In-depth Tutorial
- Inplace operation in pytorch
- 关于 pytorch inplace operation, 需要知道的几件事
- cs231n 2019 lecture 6: Hardware and Software
- Automatic differentiation in PyTorch
- Understanding how Automatic Differentiation works
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count">9</span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/byron123456sfsfsfa" target="_blank">
<img src="https://profile.csdnimg.cn/5/5/3/3_byron123456sfsfsfa" class="avatar_pic" username="byron123456sfsfsfa">
<img src="https://g.csdnimg.cn/static/user-reg-year/2x/5.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/byron123456sfsfsfa" data-report-click="{"mod":"popu_379"}" target="_blank">AlanBupt</a></span>
</div>
<div class="text"><span>发布了18 篇原创文章</span> · <span>获赞 44</span> · <span>访问量 3万+</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=byron123456sfsfsfa" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>
</article>
<script>
$("#blog_detail_zk_collection").click(function(){
window.csdn.articleCollection()
})
Torch Autograd详解
03-30 阅读数 1122
1.autograd自动微分假如我们有一个向量x=(1,1)当成input,经过一系列运算得到了output变量y,如下图所示:如图所示,向量x经过与4和自身相乘之后得到向量z,z再求长度,得到y我们... 博文 来自: Blog Life
<div class="comment-list-container">
<a id="comments"></a>
<div class="comment-list-box" style="max-height: none;"><ul class="comment-list"><li class="comment-line-box d-flex" data-commentid="10701859" data-replyname="qq_39478403"> <a target="_blank" href="https://me.csdn.net/qq_39478403"><img src="https://profile.csdnimg.cn/8/C/C/3_qq_39478403" username="qq_39478403" alt="qq_39478403" class="avatar"></a> <div class="right-box "> <div class="new-info-box clearfix"> <a target="_blank" href="https://me.csdn.net/qq_39478403"><span class="name ">__百代过客__</span></a><span class="date" title="2019-10-11 16:30:29">2个月前</span><span class="floor-num">#2楼</span><span class="new-comment">很棒</span><span class="new-opt-box"><a class="btn btn-link-blue btn-report" data-type="report">举报</a><a class="btn btn-link-blue btn-reply" data-type="reply">回复</a></span></div><div class="comment-like " data-commentid="10701859"><svg t="1569296798904" class="icon " viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5522" width="200" height="200"><path d="M726.016 906.666667h-348.586667a118.016 118.016 0 0 1-116.992-107.904l-29.013333-362.666667A117.589333 117.589333 0 0 1 348.458667 309.333333H384c126.549333 0 160-104.661333 160-160 0-51.413333 39.296-88.704 93.397333-88.704 36.906667 0 71.68 18.389333 92.928 49.194667 26.88 39.04 43.178667 111.658667 12.714667 199.509333h95.530667a117.418667 117.418667 0 0 1 115.797333 136.106667l-49.28 308.522667a180.608 180.608 0 0 1-179.072 152.704zM348.458667 373.333333l-4.48 0.170667a53.461333 53.461333 0 0 0-48.768 57.472l29.013333 362.666667c2.218667 27.52 25.6 49.024 53.205333 49.024h348.544a116.949333 116.949333 0 0 0 115.925334-98.816l49.322666-308.736a53.418667 53.418667 0 0 0-52.650666-61.781334h-144.085334a32 32 0 0 1-28.458666-46.634666c45.909333-89.130667 28.885333-155.434667 11.562666-180.522667a48.981333 48.981333 0 0 0-40.192-21.504c-6.912 0-29.397333 1.792-29.397333 24.704 0 111.317333-76.928 224-224 224h-35.541333zM170.624 906.666667a32.042667 32.042667 0 0 1-31.872-29.44l-42.666667-533.333334a32.042667 32.042667 0 0 1 29.354667-34.474666c17.066667-1.408 33.024 11.733333 34.432 29.354666l42.666667 533.333334a32.042667 32.042667 0 0 1-31.914667 34.56z" p-id="5523"></path></svg><span></span></div></div></li></ul><ul class="comment-list"><li class="comment-line-box d-flex" data-commentid="10697516" data-replyname="roupu7154"> <a target="_blank" href="https://me.csdn.net/roupu7154"><img src="https://profile.csdnimg.cn/3/9/0/3_roupu7154" username="roupu7154" alt="roupu7154" class="avatar"></a> <div class="right-box "> <div class="new-info-box clearfix"> <a target="_blank" href="https://me.csdn.net/roupu7154"><span class="name ">roupu7154</span></a><span class="date" title="2019-10-11 09:23:10">2个月前</span><span class="floor-num">#1楼</span><span class="new-comment">膜拜大神,解决了pytorch leaf variable 的问题。非常感谢</span><span class="new-opt-box"><a class="btn btn-link-blue btn-report" data-type="report">举报</a><a class="btn btn-link-blue btn-reply" data-type="reply">回复</a></span></div><div class="comment-like " data-commentid="10697516"><svg t="1569296798904" class="icon " viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5522" width="200" height="200"><path d="M726.016 906.666667h-348.586667a118.016 118.016 0 0 1-116.992-107.904l-29.013333-362.666667A117.589333 117.589333 0 0 1 348.458667 309.333333H384c126.549333 0 160-104.661333 160-160 0-51.413333 39.296-88.704 93.397333-88.704 36.906667 0 71.68 18.389333 92.928 49.194667 26.88 39.04 43.178667 111.658667 12.714667 199.509333h95.530667a117.418667 117.418667 0 0 1 115.797333 136.106667l-49.28 308.522667a180.608 180.608 0 0 1-179.072 152.704zM348.458667 373.333333l-4.48 0.170667a53.461333 53.461333 0 0 0-48.768 57.472l29.013333 362.666667c2.218667 27.52 25.6 49.024 53.205333 49.024h348.544a116.949333 116.949333 0 0 0 115.925334-98.816l49.322666-308.736a53.418667 53.418667 0 0 0-52.650666-61.781334h-144.085334a32 32 0 0 1-28.458666-46.634666c45.909333-89.130667 28.885333-155.434667 11.562666-180.522667a48.981333 48.981333 0 0 0-40.192-21.504c-6.912 0-29.397333 1.792-29.397333 24.704 0 111.317333-76.928 224-224 224h-35.541333zM170.624 906.666667a32.042667 32.042667 0 0 1-31.872-29.44l-42.666667-533.333334a32.042667 32.042667 0 0 1 29.354667-34.474666c17.066667-1.408 33.024 11.733333 34.432 29.354666l42.666667 533.333334a32.042667 32.042667 0 0 1-31.914667 34.56z" p-id="5523"></path></svg><span>1</span></div></div></li></ul></div>
<div id="commentPage" class="pagination-box d-none" style="display: block;"><div id="Paging_09077097936622636" class="ui-paging-container"><ul><li class="js-page-first js-page-action ui-pager ui-pager-disabled"></li><li class="js-page-prev js-page-action ui-pager ui-pager-disabled">上一页</li><li data-page="1" class="ui-pager focus">1</li><li class="js-page-next js-page-action ui-pager ui-pager-disabled">下一页</li><li class="js-page-last js-page-action ui-pager ui-pager-disabled"></li></ul></div></div>
</div>
PyTorch学习笔记(12)——PyTorch中的Autograd机制介绍
10-13 阅读数 2539
在《PyTorch学习笔记(11)——论nn.Conv2d中的反向传播实现过程》[1]中,谈到了Autograd在nn.Conv2d的权值更新中起到的用处。今天将以官方的说明为基础,补充说明一下关于计... 博文 来自: g11d111的博客
PyTorch官方中文文档:torch.autograd
03-10 阅读数 3233
Automatic differentiation package - torch.autogradtorch.autograd提供了类和函数用来对任意标量函数进行求导。要想使用自动求导,只需要对已有... 博文 来自: HowardWood的博客
pytorch基础入门教程/一小时学会pytorch
05-06 阅读数 9459
Pytorch一小时教程pytorch是什么它是一个基于python的科学计算库,致力于为两类用户提供服务:一些想要找到Numpy搭建神经网络替代品的用户;寻找一个可提供极强的可拓展性和运行速度的深度... 博文 来自: weixin_41070748的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_59" data-pid="59"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u3491668",
container: s
});
})();

torch.autograd.grad()函数用法示例
06-14 阅读数 3228
目录一、函数解释二、代码范例(y=x^2)一、函数解释如果输入x,输出是y,则求y关于x的导数(梯度):defgrad(outputs,inputs,grad_outputs=None,retain_... 博文 来自: 悲恋花丶无心之人的博客
pytorch入门教程
07-21 阅读数 2933
pytorch与tensorflow区别https://yq.aliyun.com/articles/183473pytorch安装进入官网:https://pytorch.org/根据配置可以生成相... 博文 来自: winycg的博客
torch.autograd方法类Variable
08-23 阅读数 9633
torch.autograd提供实现任意标量值功能的自动区分的类和功能。它需要对现有代码进行最小的更改,只需将所有张量包装在Variable对象中。VariableAPI与常规TensorAPI几乎相... 博文 来自: KGzhang的博客
pytorch入门教程:构造一个小型CNN
11-09 阅读数 1421
pytorch入门教程:构造一个小型CNN 学过深度卷积网络的应该都非常熟悉这张demo图(LeNet): 此图是LeNet的结构图,把32*32的手写英文字符图片作为输入,训练出一个对于手写字符的分... 博文 来自: 秀呀秀的博客
Pytorch-Autograd
10-02 阅读数 35
原文链接: http://chenhao.space/post/294ead72.htmlimport torchprint(torch.__version__)1.1.0自动求梯度概念上一节介绍的T... 博文 来自: 每天起床第一句要给自己打个气
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_60" data-pid="60"><iframe src="https://adaccount.csdn.net/#/preview/261?m=JcQQEHAbApJStpLiScSDnnLntyHciLQJmLUSHXAJSQtApAHniiDXiScJtHLQWStofEEtLEpiiviipDJctbSALXpiJEmtHitAoiQQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&k=&m=JcQQEHAbApJStpLiScSDnnLntyHciLQJmLUSHXAJSQtApAHniiDXiScJtHLQWStofEEtLEpiiviipDJctbSALXpiJEmtHitAoiQQ"></div></div>
对pytorch中动态建图的一点小见解
08-29 阅读数 1657
什么是动态建图?如何动态建图?动态建图为什么可以反向自动求导?我对于这个问题一直存在疑惑,但是去网上又没有找到好的解释,于是,没办法,自己实验吧。首先,我们做如下定义:a=torch.randn(2)... 博文 来自: qq_20945297的博客
pytorch autograd
05-06 阅读数 642
1.Variable三要素:data,是一个Tensorgrad,保存data的梯度,是个Variablegrad_fn,还不懂Variable的构造函数需要传入tensor,同时有两个可选参数:re... 博文 来自: silentclaire的博客
<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
<div class="d-flex">
<div class="blog-expert-recommend">
<div class="blog-expert">
<div class="blog-expert-flexbox" data-report-view="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/qq_36215315" target="_blank"><img src="https://profile.csdnimg.cn/E/3/3/3_qq_36215315" username="qq_36215315" alt="sanlinc" title="sanlinc"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><span class="blog-expert-button-follow btn-red-follow" data-name="qq_36215315" data-nick="sanlinc">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/qq_36215315" target="_blank"><h5 class="oneline" title="sanlinc">sanlinc</h5></a></span> <p></p><p class="article-num" title="41篇文章"> 41篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/g11d111" target="_blank"><img src="https://profile.csdnimg.cn/5/0/8/3_g11d111" username="g11d111" alt="sooner高" title="sooner高"><svg class="icon" aria-hidden="true"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-blogexpert"></use></svg></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><span class="blog-expert-button-follow btn-red-follow" data-name="g11d111" data-nick="sooner高">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/g11d111" target="_blank"><h5 class="oneline" title="sooner高">sooner高</h5></a></span> <p></p><p class="article-num" title="121篇文章"> 121篇文章</p><p class="article-num" title="排名:9000+"> 排名:9000+</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/HowardWood" target="_blank"><img src="https://profile.csdnimg.cn/D/E/0/3_howardwood" username="HowardWood" alt="aibbtcom" title="aibbtcom"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><span class="blog-expert-button-follow btn-red-follow" data-name="HowardWood" data-nick="aibbtcom">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/HowardWood" target="_blank"><h5 class="oneline" title="aibbtcom">aibbtcom</h5></a></span> <p></p><p class="article-num" title="93篇文章"> 93篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/weixin_41070748" target="_blank"><img src="https://profile.csdnimg.cn/5/4/D/3_weixin_41070748" username="weixin_41070748" alt="李弘宇" title="李弘宇"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><span class="blog-expert-button-follow btn-red-follow" data-name="weixin_41070748" data-nick="李弘宇">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/92210253"}"><a href="https://blog.csdn.net/weixin_41070748" target="_blank"><h5 class="oneline" title="李弘宇">李弘宇</h5></a></span> <p></p><p class="article-num" title="25篇文章"> 25篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div></div>
</div>
</div>
</div>
</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.csdn.net/kinggang2017/article/details/88018342","strategy":"searchFromBaidu1","index":"5"}" data-report-click="{"mod":"popu_387","dest":"https://blog.csdn.net/kinggang2017/article/details/88018342","strategy":"searchFromBaidu1","index":"5"}" data-track-view="{"mod":"popu_387","dest":"https://blog.csdn.net/kinggang2017/article/details/88018342","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.csdn.net/kinggang2017/article/details/88018342","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" data-flg="true"> <a href="https://blog.csdn.net/kinggang2017/article/details/88018342" target="_blank"> <h4 class="text-truncate oneline" style="width: 633px;"><em>pytorch</em>的<em>Autograd</em>简单明了的介绍 - kinggang2017的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">11-7</span> </p> </div> </a> </div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.csdn.net/weixin_42615068/article/details/90034168","strategy":"searchFromBaidu1","index":"6"}" data-report-click="{"mod":"popu_387","dest":"https://blog.csdn.net/weixin_42615068/article/details/90034168","strategy":"searchFromBaidu1","index":"6"}" data-track-view="{"mod":"popu_387","dest":"https://blog.csdn.net/weixin_42615068/article/details/90034168","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.csdn.net/weixin_42615068/article/details/90034168","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" data-flg="true"> <a href="https://blog.csdn.net/weixin_42615068/article/details/90034168" target="_blank"> <h4 class="text-truncate oneline" style="width: 626px;"><em>pytorch</em>: <em>autograd</em>中backward - weixin_42615068的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">11-11</span> </p> </div> </a> </div>
基于PyTorch的深度学习入门教程(一)——PyTorch安装和配置
11-30 阅读数 10万+
前言深度神经网络是一种目前被广泛使用的工具,可以用于图像识别、分类,物体检测,机器翻译等等。深度学习(DeepLearning)是一种学习神经网络各种参数的方法。因此,我们将要介绍的深度学习,指... 博文 来自: 雁回晴空的博客专栏
PyTorch 1.0 系列学习教程(2): autograd
01-06 阅读数 3725
PyTorch 1.0:autograd AUTOGRADPyTorch:Tensors and autogradPyTorch:Defining new autograd functionsTens... 博文 来自: gukedream的专栏
PyTorch零基础入门(一)
08-09 阅读数 65
什么是PytorchPyTorch是一个开源的Python机器学习库,基于Torch,应用于人工智能领域,如自然语言处理。 它最初由Facebook的人工智能研究团队开发,并且被用于Uber的概率编程... 博文 来自: qq_41896151的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_61" data-pid="61"><iframe src="https://adaccount.csdn.net/#/preview/922?m=cfvbHnbJDDpbEmLEAHAbLcnpEEbLfSyAJtLpLnAEJXbSHEbbXcLHobnDSDpHQnSbpiWySivmntoJEtJXcoLHJciEiQJtpSSptQiQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&k=&m=cfvbHnbJDDpbEmLEAHAbLcnpEEbLfSyAJtLpLnAEJXbSHEbbXcLHobnDSDpHQnSbpiWySivmntoJEtJXcoLHJciEiQJtpSSptQiQ"></div></div>
PyTorch 1.0 中文官方教程:Autograd:自动求导
01-25 阅读数 7
译者:bat67最新版会在译者仓库首先同步。PyTorch中,所有神经网络的核心是autograd包。先简单介绍一下这个包,然后训练我们的第一个的神经网络。autograd包为张量上的所有操作提供了自... 博文 来自: weixin_30614587的博客
Pytorch遇到的问题及解决方案 - 更新ing
01-17 阅读数 1万+
1、安装完成后,不能importtorch,提示ImportError:dlopen:cannotloadanymoreobjectwithstaticTLS解决办法:有很多答案都说是将importt... 博文 来自: Tsingzao的博客
Pytorch中autograd.Variable使用过程中的问题
04-24 阅读数 652
y.grad_fn.saved_variablesAttributeErrorTraceback(mostrecentcalllast)<ipython-input-21-eceb35361ea... 博文 来自: qq_44787464的博客
Pytorch入门——Autograd:自动分化
08-30 阅读数 9694
在上一篇博客已经对Pytorch的Tensor进行了快速介绍,本章将继续学习autograd包。autograd包是PyTorch所有神经网络的核心,为Tensors上的所有操作提供了自动区分。同时,... 博文 来自: YongqiangGao的专栏
Pytorch入门教程(二):创建Tensor
06-29 阅读数 458
1.从numpy中导入数据a=np.array([2,5.5])print(a)b=torch.from_numpy(a)print(b)结果:[2.5.5]tensor([2.0000,5.5000... 博文 来自: 小明同学
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_62" data-pid="62"><iframe src="https://adaccount.csdn.net/#/preview/999?m=ScbEtSAbtSLityLbtStcJHnnDbJAiSbAtUJmHtnJntJcfSyLottJbiiHAXDEHpoiEiAooAHcWQicAoLDmEppmttpnyHnfApiJAQQ&k=" frameborder="0" width="100%" height="103px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&k=&m=ScbEtSAbtSLityLbtStcJHnnDbJAiSbAtUJmHtnJntJcfSyLottJbiiHAXDEHpoiEiAooAHcWQicAoLDmEppmttpnyHnfApiJAQQ"></div></div>
『PyTorch』第五弹_深入理解autograd_上:Variable属性方法
02-15 阅读数 54
在PyTorch中计算图的特点可总结如下:autograd根据用户对variable的操作构建其计算图。对变量的操作抽象为Function。对于那些不是任何函数(Function)的输出,由用户创建的... 博文 来自: weixin_33825683的博客
pytorch的Autograd简单明了的介绍
02-28 阅读数 77
链接:https://www.jianshu.com/p/cbce2dd60120 博文 来自: kinggang2017的博客
Autograd:Pytorch 中的自动微分机制讲解
08-30 阅读数 1268
本文翻译、整理自Autograd官方documentation本文讲解了Autograd——pytorch中用于自动求微分的模块。下面的内容不需全部掌握,但读一下还有有助于加强理解的。在backwar... 博文 来自: gdymind的博客
Pytorch入门教程(一)基础
11-15 阅读数 891
Pytorch入门教程Pytorch基础这一部分主要介绍Pytorch的处理对象以及操作。Pytorch的两个操作对象Tensor首先介绍最基本的操作单元Tensor。Tensor就是张量的英文,表示... 博文 来自: kokozeng1995的博客
PyTorch的入门教程实战
11-12 阅读数 9477
这不是一篇PyTorch的入门教程!本文较长,你可能需要花费20分钟才能看懂大部分内容建议在电脑,结合代码阅读本文本指南的配套代码地址: chenyuntc/pytorch-best-practice... 博文 来自: wzy_zju的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_63" data-pid="63"><iframe src="https://adaccount.csdn.net/#/preview/1053?m=JSLcLvQHnESDbLAfcSHJcbvttEcSLoEHJXAELUEHJtciEinnQnipvJUHibpnQnWJXEXtEtJbcpQJnLLfnippApbvbmHLvLbpApQQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&k=&m=JSLcLvQHnESDbLAfcSHJcbvttEcSLoEHJXAELUEHJtciEinnQnipvJUHibpnQnWJXEXtEtJbcpQJnLLfnippApbvbmHLvLbpApQQ"></div></div>
pytorch grad_fn以及权重梯度不更新的问题
12-22 阅读数 5289
前提:我训练的是二分类网络,使用语言为pytorchVaribale包含三个属性:data:存储了Tensor,是本体的数据grad:保存了data的梯度,本事是个Variable而非Tensor,与... 博文 来自: duanmuji的博客
基于PyTorch的深度学习入门教程_nlp_advanced_tutorial
06-20 阅读数 110
提高版:做动态决策和Bi-LSTM CRF= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =... 博文 来自: hufei_neo的博客
新手如何入门pytorch?
07-16 阅读数 3381
Fromandthanksto:知乎陈云链接:https://www.zhihu.com/question/55720139/answer/147148105第一步github的tutorials尤其... 博文 来自: 豆芽菜
<div class="recommend-item-box recommend-box-ident recommend-download-box clearfix" data-report-view="{"mod":"popu_387","dest":"https://download.csdn.net/download/hx20491001hx/11097201","strategy":"BlogCommendFromBaidu","index":"28"}" data-report-click="{"mod":"popu_387","dest":"https://download.csdn.net/download/hx20491001hx/11097201","strategy":"BlogCommendFromBaidu","index":"28"}">
<a href="https://download.csdn.net/download/hx20491001hx/11097201" rel="noopener" target="_blank">
<div class="content clearfix">
<div class="">
<h4 class="text-truncate oneline clearfix">
<em>Pytorch</em>入门教程 </h4>
<span class="data float-right">04-08</span>
</div>
<div class="desc oneline">
2017年出的Pytorch新手教程,整合了近年来深度学习的案例,step by step,从浅入深,帮你开始深度学习之旅。 </div>
<span class="type-show type-show-download">下载</span>
</div>
</a>
</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_64" data-pid="64"><iframe src="https://adaccount.csdn.net/#/preview/1058?m=ncJnLtXSLbLtmnJJniHnDpiSnAUtcHncLvEQcSHpXAittLfinHSbbEictnbAQEvntmJtStHLJQWJDmmQJmvptpLAJvHLEvbEQASQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&k=&m=ncJnLtXSLbLtmnJJniHnDpiSnAUtcHncLvEQcSHpXAittLfinHSbbEictnbAQEvntmJtStHLJQWJDmmQJmvptpLAJvHLEvbEQASQ"></div></div>
【one way的pytorch学习笔记】(三)leaf 叶子(张量)
09-23 阅读数 244
先导在pytorch的tensor类中,有个is_leaf的属性,姑且把它作为叶子节点.is_leaf为False的时候,则不是叶子节点,is_leaf为True的时候为叶子节点(或者叶张量)所以问题... 博文 来自: One Way的博客
Pytorch(二)入门:autograd机制
09-21 阅读数 576
通过调用 backward() 函数,我们自动求出了在 x = 1 的时候的导数 需要注意的一点是:如果我们输入的 Tensor 不是一个标量,而是矢量(多个值)。 那么,我们在调用backward(... 博文 来自: 嘿芝麻的树洞
pytorch自动求导系统autograd解析
10-19 阅读数 28
1 自动求导autograd简介本文阅读时长大约5分钟。机器学习及深度学习中,梯度求导这个操作无处不在,pytorch为了使用方便,将梯度求导的方法包含在torch.autograd类中。2 一般的梯... 博文 来自: senbinyu的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_65" data-pid="65"><iframe scrolling="no" style="width: 100%; height: 60px; border: 0px;"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=65&a=809&c=0&k=&d=1&t=3&u=77b81dea032e4ca18350be6ce0b366c8"></div></div>
Pytorch学习入门(二)--- Autograd
04-30 阅读数 9018
pytorch能自动反向传播。 前向传播时,能够自动记录每个操作的拓扑顺序,反向传播时则可以自动反向传播。VariableVariable是一个类,对是对tensor的一个wrapper。 有三个属... 博文 来自: Hungryof的专栏
【PyTorch】Pytorch入门教程四
01-10 阅读数 1337
代码地址:https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/01-basics/logistic_regression/... 博文 来自: 大雄的专栏
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace
07-03 阅读数 1249
使用pytorch中nn.ReLU(inplace=True)因为inplaceop会覆盖某些函数计算渐变所需的一些数据。覆盖它后,它无法做到这一点。只需inplace=True在这些地方删除。... 博文 来自: qq_37879432的博客
Pytorch问题:autograd与backward()及相关参数的理解
01-09 阅读数 3015
关于backward标量的问题问题提出在pytorch的官方教程中,有这么一段(我稍微修改了一些)importtorch#x=torch.randn(3,requires_grad=True)x=to... 博文 来自: tanmx219的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_66" data-pid="66"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u4623747",
container: s
});
})();
基于PyTorch的深度学习入门教程(四)——构建神经网络
12-11 阅读数 1万+
前言本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。Part1:PyTorch简单知识Part2:PyTorch的自动梯度计算... 博文 来自: 雁回晴空的博客专栏
<div class="recommend-item-box type_hot_word">
<div class="content clearfix" style="width: 712px;">
<div class="float-left">
<span>
<a href="https://blog.csdn.net/yilovexing/article/details/80577510" target="_blank">
python</a>
</span>
<span>
<a href="https://blog.csdn.net/slwbcsdn/article/details/53458352" target="_blank">
json</a>
</span>
<span>
<a href="https://blog.csdn.net/csdnnews/article/details/83753246" target="_blank">
java</a>
</span>
<span>
<a href="https://blog.csdn.net/qq_35077512/article/details/88952519" target="_blank">
mysql</a>
</span>
<span>
<a href="https://blog.csdn.net/pdcfighting/article/details/80297499" target="_blank">
pycharm</a>
</span>
<span>
<a href="https://blog.csdn.net/sinyu890807/article/details/97142065" target="_blank">
android</a>
</span>
<span>
<a href="https://blog.csdn.net/gexiaoyizhimei/article/details/100122368" target="_blank">
linux</a>
</span>
<span>
<a href="https://download.csdn.net/download/xhg_gszs/10978826" target="_blank">
json格式</a>
</span>
<span>
<a href="https://www.csdn.net/gather_1d/NtDaQg5sLWRvd25sb2Fk.html" target="_blank">
a-z随机 c#产生</a>
</span>
<span>
<a href="https://www.csdn.net/gather_1f/NtDaUgwsLWRvd25sb2Fk.html" target="_blank">
c# 生成随机数15位</a>
</span>
<span>
<a href="https://www.csdn.net/gather_19/NtDaUgxsLWRvd25sb2Fk.html" target="_blank">
c# wpf不占用任务栏</a>
</span>
<span>
<a href="https://www.csdn.net/gather_19/NtDaUgysLWRvd25sb2Fk.html" target="_blank">
c#查一行数据</a>
</span>
<span>
<a href="https://www.csdn.net/gather_14/NtDaUgzsLWRvd25sb2Fk.html" target="_blank">
c# 替换字典中某个值</a>
</span>
<span>
<a href="https://www.csdn.net/gather_1e/NtDaUg0sLWRvd25sb2Fk.html" target="_blank">
c# 当前日期月份第几周</a>
</span>
<span>
<a href="https://www.csdn.net/gather_18/NtDaUg1sLWRvd25sb2Fk.html" target="_blank">
c#二进制字符转字节</a>
</span>
<span>
<a href="https://www.csdn.net/gather_12/NtDaUg2sLWRvd25sb2Fk.html" target="_blank">
c# rc4</a>
</span>
<span>
<a href="https://www.csdn.net/gather_1d/NtDaUg4sLWRvd25sb2Fk.html" target="_blank">
c#中md5加密</a>
</span>
<span>
<a href="https://www.csdn.net/gather_17/NtDaUg5sLWRvd25sb2Fk.html" target="_blank">
c# 新建mvc项目</a>
</span>
</div>
</div>
</div>
<div class="recommend-loading-box">
<img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
</div>
<div class="recommend-end-box" style="display: block;">
<p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
</div>
</div>
<div class="template-box">
<span>©️2019 CSDN</span><span class="point"></span>
<span>皮肤主题: 大白</span>
<span> 设计师:
CSDN官方博客 </span>
</div>
</main>
<aside class="blog_container_aside">
<!--主页引入-->
<div id="asideProfile" class="aside-box">
<!-- <h3 class="aside-title">个人资料</h3> -->
<div class="profile-intro d-flex">
<div class="avatar-box d-flex justify-content-center flex-column">
<a href="https://blog.csdn.net/byron123456sfsfsfa" data-report-click="{"mod":"popu_379","dest":"https://blog.csdn.net/byron123456sfsfsfa"}">
<img src="https://profile.csdnimg.cn/5/5/3/3_byron123456sfsfsfa" class="avatar_pic" username="byron123456sfsfsfa">
<img src="https://g.csdnimg.cn/static/user-reg-year/2x/5.png" class="user-years">
</a>
</div>
<div class="user-info d-flex flex-column profile-intro-name-box">
<div>
<span class="name csdn-tracking-statistics tracking-click " data-report-click="{"mod":"popu_379","dest":"https://blog.csdn.net/byron123456sfsfsfa"}" username="byron123456sfsfsfa">
<a href="https://blog.csdn.net/byron123456sfsfsfa" class="" id="uid" title="AlanBupt">
AlanBupt </a>
</span>
</div>
<div class="profile-intro-name-boxFooter">
<span class="personal-home-page" style="right:-96px;"><a target="_blank" href="https://me.csdn.net/byron123456sfsfsfa">TA的个人主页 ></a></span>
</div>
</div>
</div>
<div class="data-info d-flex item-tiling">
<dl class="text-center" title="18">
<dt><a href="https://blog.csdn.net/byron123456sfsfsfa" data-report-query="t=1">原创</a></dt>
<dd><a href="https://blog.csdn.net/byron123456sfsfsfa" data-report-query="t=1"><span class="count">18</span></a></dd>
</dl>
<dl class="text-center" id="fanBox" title="21">
<dt>粉丝</dt>
<dd><span class="count" id="fan">21</span></dd>
</dl>
<dl class="text-center" title="44">
<dt>获赞</dt>
<dd><span class="count">44</span></dd>
</dl>
<dl class="text-center" title="10">
<dt>评论</dt>
<dd><span class="count">10</span></dd>
</dl>
<dl class="text-center" title="37410">
<dt>访问</dt>
<dd><span class="count">3万+</span></dd>
</dl>
</div>
<div class="grade-box clearfix">
<dl class="aside-box-footerClassify">
<dt>等级:</dt>
<dd>
<a href="https://blog.csdn.net/home/help.html#level" title="3级,点击查看等级说明" target="_blank">
<svg class="icon icon-level" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-bloglevel-3"></use>
</svg>
</a>
</dd>
</dl>
<dl>
<dt>周排名:</dt>
<dd>
<a class="grade-box-rankA" href="https://blog.csdn.net/rank/writing_rank" target="_blank">
2万+ </a>
</dd>
</dl>
<dl>
<dt>积分:</dt>
<dd title="557">
557 </dd>
</dl>
<dl title="129995">
<dt>总排名:</dt>
<dd>
<a class="grade-box-rankA" href="https://blog.csdn.net/rank/writing_rank_total" target="_blank">
12万+ </a>
</dd>
</dl>
</div>
<div class="aside-box-footer">
<div class="badge-box d-flex">
<div class="profile-medal">勋章:</div>
<div class="badge d-flex">
<div class="icon-badge" title="GitHub">
<div class="mouse-box">
<img src="https://g.csdnimg.cn/static/user-medal/github.svg" alt="">
<div class="icon-arrow"></div>
</div>
<div class="grade-detail-box">
<div class="pos-box">
<div class="left-box d-flex justify-content-center align-items-center flex-column">
<img src="https://g.csdnimg.cn/static/user-medal/github.svg" alt="">
<p>GitHub</p>
</div>
<div class="right-box">
绑定GitHub第三方账户获取 </div>
</div>
</div>
</div>
<div class="icon-badge" title="勤写标兵Lv1">
<div class="mouse-box">
<img src="https://g.csdnimg.cn/static/user-medal/qixiebiaobing-1.png" alt="">
<div class="icon-arrow"></div>
</div>
<div class="grade-detail-box">
<div class="pos-box">
<div class="left-box d-flex justify-content-center align-items-center flex-column">
<img src="https://g.csdnimg.cn/static/user-medal/qixiebiaobing-1.png" alt="">
<p>勤写标兵Lv1</p>
</div>
<div class="right-box">
授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。 </div>
</div>
</div>
</div>
</div>
<script>
(function($) {
setTimeout(function() {
$('div.icon-badge.show-moment').removeClass('show-moment');
}, 5000);
})(window.jQuery)
</script>
</div>
</div>
<div class="profile-intro-name-boxOpration">
<div class="opt-letter-watch-box">
<a class="personal-watch bt-button" id="btnAttent" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
<div class="opt-letter-watch-box">
<a class="bt-button btn-red-hollow personal-letter" href="https://im.csdn.net/im/main.html?userName=byron123456sfsfsfa" target="_blank" rel="noopener">私信</a>
</div>
</div>
</div>
<h3 class="aside-title">最新文章</h3>
<div class="aside-content">
<ul class="inf_list clearfix">
<li class="clearfix">
<a data-report-click="{"mod":"popu_382","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/102996399"}" href="https://blog.csdn.net/byron123456sfsfsfa/article/details/102996399" target="_blank">
Python Pillow 和 cv2 图片 resize 速度的比较 </a>
</li>
<li class="clearfix">
<a data-report-click="{"mod":"popu_382","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/96003317"}" href="https://blog.csdn.net/byron123456sfsfsfa/article/details/96003317" target="_blank">
torch.backends.cudnn.benchmark ?! </a>
</li>
<li class="clearfix">
<a data-report-click="{"mod":"popu_382","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/90609758"}" href="https://blog.csdn.net/byron123456sfsfsfa/article/details/90609758" target="_blank">
浅谈 PyTorch 中的 tensor 及使用 </a>
</li>
<li class="clearfix">
<a data-report-click="{"mod":"popu_382","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/89930990"}" href="https://blog.csdn.net/byron123456sfsfsfa/article/details/89930990" target="_blank">
PyTorch 中的 ModuleList 和 Sequential: 区别和使用场景 </a>
</li>
<li class="clearfix">
<a data-report-click="{"mod":"popu_382","dest":"https://blog.csdn.net/byron123456sfsfsfa/article/details/88923085"}" href="https://blog.csdn.net/byron123456sfsfsfa/article/details/88923085" target="_blank">
Python小技巧 - argmax </a>
</li>
</ul>
</div>
最新评论

<div class="aside-box">
<div class="persion_article">
<div class="right_box footer_box csdn-tracking-statistics"> <div class="contact-box" id="footer-contact-box"><div class="img-box"><a href="https://edu.csdn.net" data-report-query="utm_source=csdn_footer" target="_blank"><img src="https://csdnimg.cn/pubfooter/images/edu-QR.png" alt="CSDN学院" style="padding: 6px;width: 98px;height: 98px;"></a><p class="app-text">CSDN学院</p></div><div class="img-box fr"><img style="padding: 6px;width: 98px;height: 98px;" src="https://csdnimg.cn/pubfooter/images/job-QR.png" alt="CSDN企业招聘"><p class="app-text">CSDN企业招聘</p></div></div> <div class="contact-info"> <p><svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.167 2h11.666C14.478 2 15 2.576 15 3.286v9.428c0 .71-.522 1.286-1.167 1.286H2.167C1.522 14 1 13.424 1 12.714V3.286C1 2.576 1.522 2 2.167 2zm-.164 3v1L8 10l6-4V5L8 9 2.003 5z" fill="#5c5c5c" fill-rule="evenodd"></path></svg><a href="mailto:webmaster@csdn.net" target="_blank"><span class="txt">kefu@csdn.net</span></a> <em class="width126"><svg t="1538013544186" width="17" height="17" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23556" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M902.60033922 650.96445566c-18.0718526-100.84369837-94.08399771-166.87723736-94.08399771-166.87723737 10.87530062-91.53186599-28.94715402-107.78733693-28.94715401-107.78733691C771.20003413 93.08221664 517.34798062 98.02553561 511.98620441 98.16348824 506.65661791 98.02553561 252.75857992 93.08221664 244.43541101 376.29988138c0 0-39.79946279 16.25547094-28.947154 107.78733691 0 0-75.98915247 66.03353901-94.0839977 166.87723737 0 0-9.63372291 170.35365477 86.84146124 20.85850523 0 0 21.70461757 56.79068296 61.50407954 107.78733692 0 0-71.1607951 23.19910867-65.11385185 83.46161052 0 0-2.43717093 67.16015592 151.93232126 62.56172014 0 0 108.5460788-8.0932473 141.10300432-52.14626271H526.33792324c32.57991817 44.05301539 141.10300431 52.1462627 141.10300431 52.14626271 154.3235077 4.59843579 151.95071457-62.56172013 151.95071457-62.56172014 6.00095876-60.26250183-65.11385185-83.46161053-65.11385185-83.46161052 39.77647014-50.99665395 61.4810877-107.78733693 61.4810877-107.78733692 96.45219231 149.49514952 86.84146124-20.85850523 86.84146125-20.85850523" p-id="23557" fill="#5c5c5c"></path></svg><a href="https://url.cn/5epoHIm?_type=wpa&qidian=true" class="qqcustomer_s" target="_blank"><span class="txt">QQ客服</span></a></em></p> <p><em class="width126"><svg t="1538012951761" width="17" height="17" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23083" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M466.4934485 880.02006511C264.6019863 859.18313878 107.13744214 688.54706608 107.13744214 481.14947309 107.13744214 259.68965394 286.68049114 80.14660493 508.14031029 80.14660493s401.00286817 179.54304901 401.00286814 401.00286816v1.67343191C908.30646249 737.58941724 715.26799489 943.85339507 477.28978337 943.85339507c-31.71423369 0-62.61874229-3.67075386-92.38963569-10.60739903 30.09478346-11.01226158 56.84270313-29.63593923 81.5933008-53.22593095z m-205.13036267-398.87059202a246.77722444 246.77722444 0 0 0 493.5544489 0 30.85052691 30.85052691 0 0 0-61.70105383 0 185.07617062 185.07617062 0 0 1-370.15234125 0 30.85052691 30.85052691 0 0 0-61.70105382 0z" p-id="23084" fill="#5c5c5c"></path></svg><a href="http://bbs.csdn.net/forums/Service" target="_blank"><span class="txt">客服论坛</span></a></em> <svg t="1538013874294" width="17" height="17" style="" viewBox="0 0 1194 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23784" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1031.29689505 943.85339507h-863.70679012A71.98456279 71.98456279 0 0 1 95.60554212 871.86883228v-150.85178906c0-28.58329658 16.92325492-54.46750945 43.13135785-65.93861527l227.99160176-99.75813425c10.55341735-4.61543317 18.24580594-14.0082445 20.72896295-25.23643277l23.21211998-105.53417343a71.95757195 71.95757195 0 0 1 70.28414006-56.51881307h236.95255971c33.79252817 0 63.02360485 23.5090192 70.28414004 56.51881307l23.21211997 105.53417343c2.48315701 11.25517912 10.17554562 20.62099961 20.72896296 25.23643277l227.99160177 99.75813425a71.98456279 71.98456279 0 0 1 43.13135783 65.93861527v150.85178906A71.98456279 71.98456279 0 0 1 1031.26990421 943.85339507z m-431.85339506-143.94213475c143.94213474 0 143.94213474-48.34058941 143.94213474-107.96334876s-64.45411922-107.96334877-143.94213474-107.96334877c-79.51500637 0-143.94213474 48.34058941-143.94213475 107.96334877s0 107.96334877 143.94213475 107.96334876zM1103.254467 296.07330247v148.9894213a35.97878598 35.97878598 0 0 1-44.15700966 35.03410667l-143.94213473-33.57660146a36.0057768 36.0057768 0 0 1-27.80056231-35.03410668V296.1002933c-35.97878598-47.98970852-131.95820302-71.98456279-287.91126031-71.98456279S347.53801649 248.11058478 311.53223967 296.1002933v115.385829c0 16.73431906-11.52508749 31.25538946-27.80056233 35.03410668l-143.94213473 33.57660146A35.97878598 35.97878598 0 0 1 95.63253297 445.06272377V296.07330247C162.81272673 152.13116772 330.77670658 80.14660493 599.47049084 80.14660493s436.63077325 71.98456279 503.81096699 215.92669754z" p-id="23785" fill="#5c5c5c"></path></svg>400-660-0108 </p> <p style="text-align:center">工作时间 8:30-22:00</p> </div> <div class="bg-gray"> <div class="feed_copyright"> <p><a class="right-dotte" href="//www.csdn.net/company/index.html#about" target="_blank">关于我们</a><a href="//www.csdn.net/company/index.html#recruit" target="_blank" class="right-dotte">招聘</a><a href="//www.csdn.net/company/index.html#contact" target="_blank" class="right-dotte">广告服务</a> <a href="https://www.csdn.net/gather/A" target="_blank" class="footer_baidu"> 网站地图</a></p> <p class="fz12_baidu"><a href="http://beian.miit.gov.cn/publish/query/indexFirst.action" rel="noreferrer" target="_blank" class="ml14">京ICP备19004658号</a><a style="margin-left:5px;" href="https://csdnimg.cn/cdn/content-toolbar/csdn-ICP.png" target="_blank"> 经营性网站备案信息</a></p> <p class="fz12_baidu"><img style="vertical-align: middle;height:20px;width:20px;margin-bottom:3px;margin-right:5px" src="https://csdnimg.cn/pubfooter/images/gongan.png"><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502030143" rel="noreferrer" target="_blank" class="ml14">公安备案号 11010502030143</a></p> <p class="fz12_baidu">©1999-2019 北京创新乐知网络技术有限公司 </p> </div> </div> <div class="allow-info-box"> <p> <em class="width126"><a href="http://www.cyberpolice.cn/" target="_blank"><span>网络110报警服务</span></a></em></p> <p><a href="http://www.bjjubao.org/" target="_blank"><span>北京互联网违法和不良信息举报中心</span></a></p> <p><a href="http://www.12377.cn/" target="_blank"><span>中国互联网举报中心</span></a><a href="https://download.csdn.net/index.php/tutelage/" target="_blank"><span style="margin-left:8px">家长监护</span></a><a href="https://blog.csdn.net/blogdevteam/article/details/90369522" target="_blank"><span style="margin-left:8px">版权申诉</span></a></p> </div> </div></div>
</div>
</div>
qq_41743108:说的很好!!
xxxqcbQ:说的很通俗易懂,
qq_39478403:很棒
roupu7154:膜拜大神,解决了pytorch leaf variable 的问题。非常感谢
qq_25892947:说得太好了!如果要固定训练结果的话,还要注意固定numpy的随机种子(如果用到numpy的随机数的话)