2018-10-03 18:59:01 +00:00
|
|
|
# from: https://groups.google.com/forum/#!topic/parakeet-python/p-flp2kdE4U
|
|
|
|
# setup: import numpy as np ;d = 10 ;re = 5 ;params = (d, re, np.ones((2*d, d+1, re)), np.ones((d, d+1, re)), np.ones((d, 2*d)), np.ones((d, 2*d)), np.ones((d+1, re, d)), np.ones((d+1, re, d)), 1) # noqa
|
|
|
|
# run: slowparts(*params)
|
2018-04-05 22:07:33 +00:00
|
|
|
|
2018-10-03 18:59:01 +00:00
|
|
|
# pythran export slowparts(int, int, float [][][], float [][][], float
|
|
|
|
# [][], float [][], float [][][], float [][][], int)
|
2018-04-05 22:07:33 +00:00
|
|
|
from numpy import zeros, power, tanh
|
2018-10-03 12:38:48 +00:00
|
|
|
|
|
|
|
|
2018-04-05 22:07:33 +00:00
|
|
|
def slowparts(d, re, preDz, preWz, SRW, RSW, yxV, xyU, resid):
|
2020-09-24 10:28:10 +00:00
|
|
|
"""computes the linear algebra intensive part of the gradients of the grae"""
|
2020-06-28 18:24:40 +00:00
|
|
|
|
|
|
|
def fprime(x):
|
|
|
|
return 1 - power(tanh(x), 2)
|
2018-04-05 22:07:33 +00:00
|
|
|
|
2018-10-03 18:59:01 +00:00
|
|
|
partialDU = zeros((d + 1, re, 2 * d, d))
|
|
|
|
for k in range(2 * d):
|
2018-04-05 22:07:33 +00:00
|
|
|
for i in range(d):
|
2018-10-03 18:59:01 +00:00
|
|
|
partialDU[:, :, k, i] = (
|
2020-06-28 18:24:40 +00:00
|
|
|
fprime(preDz[k])
|
|
|
|
* fprime(preWz[i])
|
|
|
|
* (SRW[i, k] + RSW[i, k])
|
|
|
|
* yxV[:, :, i]
|
|
|
|
)
|
2018-10-03 12:38:48 +00:00
|
|
|
|
2018-04-05 22:07:33 +00:00
|
|
|
return partialDU
|