gpt4 book ai didi

python - Pytorch:输出 w.r.t 参数的梯度

转载 作者:行者123 更新时间:2023-12-03 21:23:18 24 4
gpt4 key购买 nike

我对查找关于参数(权重和偏差)的神经网络输出的梯度很感兴趣。

更具体地说,假设我有以下神经网络结构 [6,4,3,1]。输入样本大小是 20。我感兴趣的是找到神经网络输出的梯度与权重(和偏差),如果我没记错的话,在这种情况下应该是 47。在文献中,这个梯度有时称为 Weight_Jacobian。

我在 Jupyter Notebook 上的 Python 3.6 上使用 Pytorch 0.4.0 版。

我制作的代码是这样的:

def init_params(layer_sizes, scale=0.1, rs=npr.RandomState(0)):
return [(rs.randn(insize, outsize) * scale, # weight matrix
rs.randn(outsize) * scale) # bias vector
for insize, outsize in
zip(layer_sizes[:-1],layer_sizes[1:])]
layers = [6, 4, 3, 1]
w = init_params(layers)
first_layer_w = Variable(torch.tensor(w[0][0],requires_grad=True))
first_layer_bias = Variable(torch.tensor(w[0][1],requires_grad=True))
second_layer_w = Variable(torch.tensor(w[1][0],requires_grad=True))
second_layer_bias = Variable(torch.tensor(w[1][1],requires_grad=True))
third_layer_w = Variable(torch.tensor(w[2][0],requires_grad=True))
third_layer_bias = Variable(torch.tensor(w[2][1],requires_grad=True))
X = Variable(torch.tensor(X_batch),requires_grad=True)
output=torch.tanh(torch.mm(torch.tanh(torch.mm(torch.tanh(torch.mm(X,first_layer_w)+first_layer_bias),second_layer_w)+second_layer_bias),third_layer_w)+third_layer_bias)
output.backward()

从代码中可以明显看出,我使用双曲正切作为非线性。代码生成长度为 20 的输出向量。现在,我有兴趣找到这个输出向量的梯度 w.r.t 所有权重(全部 47 个)。我已经在 here 阅读了 Pytorch 的文档。 .我也看到过类似的问题,例如 here .但是,我未能找到输出向量 w.r.t 参数的梯度。
如果我使用 Pytorch 函数向后(),它会产生一个错误

RuntimeError: grad can be implicitly created only for scalar outputs

我的问题是,有没有办法计算输出向量 w.r.t 参数的梯度,它基本上可以表示为 20*47 矩阵,因为我的输出向量大小为 20,参数向量大小为 47?如果是这样,如何?我的代码有什么问题吗?只要 X 的尺寸为 20*6,您就可以采用 X 的任何示例。

最佳答案

您正在尝试计算函数的雅可比矩阵,而 PyTorch 则希望您计算向量雅可比矩阵乘积。你可以看到关于用 PyTorch 计算 Jacobian 的深入讨论 here .

你有两个选择。您的第一个选择是使用 JAXautograd并使用 jacobian() 函数。您的第二个选择是坚持使用 Pytorch 并通过调用 backwards(vec) 计算 20 个向量雅可比乘积。 20次,其中vec是一个长度为 20 的单热向量,其中为 1 的分量的索引范围从 0 到 19。如果这令人困惑,我建议阅读 autodiff cookbook来自 JAX 教程。

关于python - Pytorch:输出 w.r.t 参数的梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50175711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com