【发布时间】:2019-04-26 23:58:42
【问题描述】:
我正在尝试从 PyTorch 中构建的简单网络中提取权重和偏差。我的整个网络由 nn.Linear 层组成。当我通过调用nn.Linear(in_dim, out_dim) 创建一个层时,我希望通过调用model.parameters() 获得的参数对于该模型具有形状(in_dim, out_dim) 的权重和(out_dim) 的偏差。但是,来自model.parameters() 的权重不是形状(out_dim, in_dim)。
我的代码的目的是能够使用矩阵乘法来执行前向传递,只使用 numpy,而不是任何 PyTorch。由于形状不一致,矩阵乘法会引发错误。我该如何解决这个问题?
这是我的确切代码:
class RNN(nn.Module):
def __init__(self, dim_input, dim_recurrent, dim_output):
super(RNN, self).__init__()
self.dim_input = dim_input
self.dim_recurrent = dim_recurrent
self.dim_output = dim_output
self.dense1 = nn.Linear(self.dim_input, self.dim_recurrent)
self.dense2 = nn.Linear(self.dim_recurrent, self.dim_recurrent, bias = False)
self.dense3 = nn.Linear(self.dim_input, self.dim_recurrent)
self.dense4 = nn.Linear(self.dim_recurrent, self.dim_recurrent, bias = False)
self.dense5 = nn.Linear(self.dim_recurrent, self.dim_output)
#There is a defined forward pass
model = RNN(12, 100, 6)
for i in model.parameters():
print(i.shape())
输出是:
torch.Size([100, 12])
torch.Size([100])
torch.Size([100, 100])
torch.Size([100, 12])
torch.Size([100])
torch.Size([100, 100])
torch.Size([6, 100])
torch.Size([6])
如果我是正确的,输出应该是:
torch.Size([12, 100])
torch.Size([100])
torch.Size([100, 100])
torch.Size([12, 100])
torch.Size([100])
torch.Size([100, 100])
torch.Size([100, 6])
torch.Size([6])
我的问题是什么?
【问题讨论】:
-
请分享相关代码并突出显示那里的确切问题
标签: python machine-learning pytorch