(X, Z, T, Y, W2)
| 68 | |
| 69 | |
| 70 | def derivative_w1(X, Z, T, Y, W2): |
| 71 | N, D = X.shape |
| 72 | M, K = W2.shape |
| 73 | |
| 74 | # slow way first |
| 75 | # ret1 = np.zeros((X.shape[1], M)) |
| 76 | # for n in xrange(N): |
| 77 | # for k in xrange(K): |
| 78 | # for m in xrange(M): |
| 79 | # for d in xrange(D): |
| 80 | # ret1[d,m] += (T[n,k] - Y[n,k])*W2[m,k]*Z[n,m]*(1 - Z[n,m])*X[n,d] |
| 81 | |
| 82 | # fastest |
| 83 | dZ = (T - Y).dot(W2.T) * Z * (1 - Z) |
| 84 | ret2 = X.T.dot(dZ) |
| 85 | |
| 86 | # assert(np.abs(ret1 - ret2).sum() < 0.00001) |
| 87 | |
| 88 | return ret2 |
| 89 | |
| 90 | |
| 91 | def derivative_b2(T, Y): |