나를 구현하기 위해 노력하고 몇 가지 계산이지만,수정하는 방법을 자동화 나의 코드를 사용하지 않습니다.
게 설명하십시오:나는 매트릭스 M[N,C]
의 중 0
나 1
. 또 다른 매트릭스 Y[N,1]
을 포함하는 값의 [0,C-1]
(나 클래스). 또 다른 매트릭스 ds[N,M]
는 내용합니다.
출력 매트릭스의 크기 grad[M,C]
해야 합 계산하는 다음과 같다:내가에 대한 설명 grad[:,0]
같은 논리를 다른 어떤 열입니다.
각 행에 대해(예제)에 ds
는 경우 Y[that sample] != 0
(현재 열의 행렬 출력)고 M[that sample, 0] > 0
다음 grad[:,0] += ds[that sample]
는 경우 Y[that sample] == 0
다음 grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
여기에는 나의 반복적인 접근 방식:
for i in range(M.size(dim=1)):
for j in range(ds.size(dim=0)):
if y[j] == i:
grad[:,i] = grad[:,i] - (ds[j,:].T * sum(M[j,:]))
else:
if M[j,i] > 0:
grad[:,i] = grad[:,i] + ds[j,:].T