Pytorch TypeError: forward() takes 2 positional arguments but 4 were given
Pytorch TypeError: forward() takes 2 positional arguments but 4 were given
from torch.nn.parameter import Parameter
from torch.nn.modules.module import Module
class Graphconvlayer(nn.Module):
def __init__(self,adj,input_feature_neurons,output_neurons):
super(Graphconvlayer, self).__init__()
self.adj=adj
self.input_feature_neurons=input_feature_neurons
self.output_neurons=output_neurons
self.weights=Parameter(torch.normal(mean=0.0,std=torch.ones(input_feature_neurons,output_neurons)))
self.bias=Parameter(torch.normal(mean=0.0,std=torch.ones(input_feature_neurons)))
def forward(self,inputfeaturedata):
output1= torch.mm(self.adj,inputfeaturedata)
print(output1.shape)
print(self.weights.shape)
print(self.bias.shape)
output2= torch.matmul(output1,self.weights.t())+ self.bias
return output2
class GCN(nn.Module):
def __init__(self,lr,dropoutvalue,adjmatrix,inputneurons,hidden,outputneurons):
super(GCN, self).__init__()
self.lr=lr
self.dropoutvalue=dropoutvalue
self.adjmatrix=adjmatrix
self.inputneurons=inputneurons
self.hidden=hidden
self.outputneurons=outputneurons
self.gcn1 = Graphconvlayer(adjmatrix,inputneurons,hidden)
self.gcn2 = Graphconvlayer(adjmatrix,hidden,outputneurons)
def forward(self,x,adj):
x= F.relu(self.gcn1(adj,x,64))
x= F.dropout(x,self.dropoutvalue)
x= self.gcn2(adj,x,7)
return F.log_softmax(x,dim=1)
a=GCN(lr=0.001,dropoutvalue=0.5,adjmatrix=adj,inputneurons=features.shape[1],hidden=64,outputneurons=7)
a.forward(adj,features)
TypeError Traceback (most recent call last)
<ipython-input-85-7d1a2a73ecad> in <module>()
37
38 a=GCN(lr=0.001,dropoutvalue=0.5,adjmatrix=adj,inputneurons=features.shape[1],hidden=64,outputneurons=7)
---> 39 a.forward(adj,features)
1 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self.forward(*input, **kwargs)
888 for hook in itertools.chain(
--> 889 _global_forward_hooks.values(),
890 self._forward_hooks.values()):
891 hook_result = hook(self, input, result)
TypeError: forward() takes 2 positional arguments but 4 were given
print(a)
>>>
GCN(
(gcn1): Graphconvlayer()
(gcn2): Graphconvlayer()
)
这是一个图神经网络。我想要得到的是前向层的输出。我不确定为什么会出现上述错误以及我应该更改哪些代码才能正常工作。
谁能指导我解决这个问题?
此外,如果我将 class graphconvlayer 传递给 class GCN,我现在是否必须分别将它的每个参数也传递给 class GCN 的对象 ä?
你的GCN
由两个Graphconvlayer
组成。
正如您发布的代码中所定义的,Graphconvlayer
的 forward
方法只需要 一个 输入参数:inputfeaturedata
。但是,当 GCN
调用 self.gcn1
或 self.gcn2
(在其 forward
方法中)时,它会传递 3 个参数:self.gcn1(adj,x,64)
和 self.gcn2(adj,x,7)
.
因此,self.gcn1
和 self.gcn2
接收的不是单个输入参数,而是 3——这就是您遇到的错误。
from torch.nn.parameter import Parameter
from torch.nn.modules.module import Module
class Graphconvlayer(nn.Module):
def __init__(self,adj,input_feature_neurons,output_neurons):
super(Graphconvlayer, self).__init__()
self.adj=adj
self.input_feature_neurons=input_feature_neurons
self.output_neurons=output_neurons
self.weights=Parameter(torch.normal(mean=0.0,std=torch.ones(input_feature_neurons,output_neurons)))
self.bias=Parameter(torch.normal(mean=0.0,std=torch.ones(input_feature_neurons)))
def forward(self,inputfeaturedata):
output1= torch.mm(self.adj,inputfeaturedata)
print(output1.shape)
print(self.weights.shape)
print(self.bias.shape)
output2= torch.matmul(output1,self.weights.t())+ self.bias
return output2
class GCN(nn.Module):
def __init__(self,lr,dropoutvalue,adjmatrix,inputneurons,hidden,outputneurons):
super(GCN, self).__init__()
self.lr=lr
self.dropoutvalue=dropoutvalue
self.adjmatrix=adjmatrix
self.inputneurons=inputneurons
self.hidden=hidden
self.outputneurons=outputneurons
self.gcn1 = Graphconvlayer(adjmatrix,inputneurons,hidden)
self.gcn2 = Graphconvlayer(adjmatrix,hidden,outputneurons)
def forward(self,x,adj):
x= F.relu(self.gcn1(adj,x,64))
x= F.dropout(x,self.dropoutvalue)
x= self.gcn2(adj,x,7)
return F.log_softmax(x,dim=1)
a=GCN(lr=0.001,dropoutvalue=0.5,adjmatrix=adj,inputneurons=features.shape[1],hidden=64,outputneurons=7)
a.forward(adj,features)
TypeError Traceback (most recent call last)
<ipython-input-85-7d1a2a73ecad> in <module>()
37
38 a=GCN(lr=0.001,dropoutvalue=0.5,adjmatrix=adj,inputneurons=features.shape[1],hidden=64,outputneurons=7)
---> 39 a.forward(adj,features)
1 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self.forward(*input, **kwargs)
888 for hook in itertools.chain(
--> 889 _global_forward_hooks.values(),
890 self._forward_hooks.values()):
891 hook_result = hook(self, input, result)
TypeError: forward() takes 2 positional arguments but 4 were given
print(a)
>>>
GCN(
(gcn1): Graphconvlayer()
(gcn2): Graphconvlayer()
)
这是一个图神经网络。我想要得到的是前向层的输出。我不确定为什么会出现上述错误以及我应该更改哪些代码才能正常工作。 谁能指导我解决这个问题?
此外,如果我将 class graphconvlayer 传递给 class GCN,我现在是否必须分别将它的每个参数也传递给 class GCN 的对象 ä?
你的GCN
由两个Graphconvlayer
组成。
正如您发布的代码中所定义的,Graphconvlayer
的 forward
方法只需要 一个 输入参数:inputfeaturedata
。但是,当 GCN
调用 self.gcn1
或 self.gcn2
(在其 forward
方法中)时,它会传递 3 个参数:self.gcn1(adj,x,64)
和 self.gcn2(adj,x,7)
.
因此,self.gcn1
和 self.gcn2
接收的不是单个输入参数,而是 3——这就是您遇到的错误。