【发布时间】:2019-01-15 23:41:26
【问题描述】:
假设我有一个使用正态分布初始化的神经网络,并且我想使用用于初始化的平均值作为网络的参数。
我有一个小例子:
import torch
parameter_vector = torch.tensor(range(10), dtype=torch.float, requires_grad=True)
sigma = torch.ones(parameter_vector.size(0), dtype=torch.float)*0.1
init_result = torch.normal(parameter_vector, sigma)
print('requires_grad:', init_result.requires_grad)
print('result: ', init_result)
这会导致:
requires_grad: True
result: tensor([ 0.1026, 0.9183, 1.9586, 3.1778, 4.0538, 4.8056, 5.9561,
6.9501, 7.7653, 8.9583])
所以requires_grad 标志显然是从均值张量中接管的。 parameter_vector.
但这是否自动意味着parameter_vector 将在init_result 影响最终结果的更大网络中通过backward() 更新?
尤其是normal() 看起来并不像正常操作,因为它涉及随机性。
【问题讨论】:
-
如果您想这样做,最好使用重新参数化技巧stats.stackexchange.com/a/342815/133099,它允许您通过采样操作进行反向传播
-
@iacolippo 谢谢,这真的很高兴知道!我会这样尝试,但是你知道它是如何在 pytorch 中实现的吗?尚未找到生成完成的实际源代码。
-
相关问题(指导性阅读):github.com/pytorch/pytorch/issues/4620 他们建议使用
torch.distributions -
谢谢,我会通过问题线程。我实现了您从交叉验证中建议的方式。到目前为止它工作正常,但打印输出中显示了一个新标志:
tensor([-0.0047, 0.8995, 1.9992, 2.9483, 3.9291, 4.8601, 5.9526, 6.9122, 8.0088, 8.8857], grad_fn=<ThAddBackward>)- 知道grad_fn=<ThAddBackward>是什么意思吗?以前没见过。 -
好吧,它似乎只是说这是添加张量的结果。所以我想它现在可以工作了 - 非常感谢!
标签: python neural-network deep-learning pytorch backpropagation