Я написал класс для нейронной сети для задачи мультиклассификации, он работает хорошо, но когда я сделал тот же код для бинарной классификации с некоторой модификацией, он показал некоторую ошибку в измерении умножения матриц
Я написал это длямоя многоклассовая классификация
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)