如何解决乘法中的维数问题

时间:2019-10-22 16:17:03

标签: python numpy

我为多重分类任务编写了神经网络类,但效果很好,但是当我对二进制分类执行相同的代码时,做了一些修改,却显示出矩阵乘法维度上的错误

这是我为多类别分类编写的

def grad(self, X, Y, params = None):
    if params is None:
      params = self.params 

    self.forward_pass(X, params)
    m = X.shape[0]
    self.gradients["dA2"] = self.H2 - Y # (N, 4) - (N, 4) -> (N, 4)
    self.gradients["dW2"] = np.matmul(self.H1.T, self.gradients["dA2"]) # (2, N) * (N, 4) -> (2, 4)
    self.gradients["dB2"] = np.sum(self.gradients["dA2"], axis=0).reshape(1, -1) # (N, 4) -> (1, 4)
    self.gradients["dH1"] = np.matmul(self.gradients["dA2"], params["W2"].T) # (N, 4) * (4, 2) -> (N, 2)
    self.gradients["dA1"] = np.multiply(self.gradients["dH1"], self.grad_activation(self.H1)) # (N, 2) .* (N, 2) -> (N, 2)
    self.gradients["dW1"] = np.matmul(X.T, self.gradients["dA1"]) # (2, N) * (N, 2) -> (2, 2)
    self.gradients["dB1"] = np.sum(self.gradients["dA1"], axis=0).reshape(1, -1) # (N, 2) -> (1, 2)

我对二进制分类做了一些修改

 self.forward_pass(X,params)

    m=X.shape[0]
    self.gradients['dA2']=self.H2-Y # (N,1)
    self.gradients['dW2']=np.matmul(self.H1.T,self.gradients['dA2']) # (2,N)*(N,1)->(2,1)
    self.gradients['dB2']=np.sum(self.gradients['dA2'],axis=0).reshape(1,-1) # (N,1)->(1,1)
    self.gradients['dH1']=np.matmul(self.gradients['dA2'],params['W2'].T) #(N,1)*(1,2)->(N,1)
    self.gradients['dA1']=np.multiply(self.gradients['dH1'],self.grad_activation(self.H1)) #(N,2)*(N,2)
    self.gradients['dW1']=np.matmul(X.T,self.gradients['dA1'])# (2,N)*(N,2)->(2,2)
    self.gradients['dB1']=np.sum(self.gradients['dA1'],axis=0).reshape(1,-1)# (N,2)->(1,2)

但是我遇到此错误任何建议都是我的代码不正确

self.gradients['dW2']=np.matmul(self.H1.T,self.gradients['dA2']) # (2,N)*(N,1)->(2,1)
 self.gradients['dB2']=np.sum(self.gradients['dA2'],axis=0).reshape(1,-1) # (N,1)->(1,1)
 -->self.gradients['dH1']=np.matmul(self.gradients['dA2'],params['W2'].T) #(N,1)*(1,2)->(N,1)   self.gradients['dA1']=np.multiply(self.gradients['dH1'],self.grad_activation(self.H1)) #(N,2)*(N,2)  self.gradients['dW1']=np.matmul(X.T,self.gradients['dA1'])# (2,N)*(N,2)->(2,2)

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 1 is different from 750)

0 个答案:

没有答案