In [29]:
import numpy as np
seed=13
rnd = np.random.RandomState(seed)

In [30]:
def conditioning(w):
    eig_values = np.abs(np.linalg.eigvals(w))
    cond = max(eig_values) / min(eig_values)
    return cond

In [31]:
n = 5
std_dev = 0.05
w = rnd.normal(loc=0, scale=std_dev, size=(n, n))

In [32]:
w


Out[32]:
array([[-0.03561953,  0.03768832, -0.00222515,  0.02259062,  0.06725509],
       [ 0.02661689,  0.06750939,  0.04306057,  0.07393429, -0.05226886],
       [-0.03944945, -0.0630803 ,  0.02814234, -0.01216631,  0.04568704],
       [ 0.01586755,  0.00636516,  0.10751915,  0.03031443, -0.00133858],
       [-0.04920804,  0.05953526,  0.04764153, -0.05435908, -0.00726057]])

In [33]:
u, s, v = np.linalg.svd(w)

In [34]:
w1 = np.dot(np.dot(u, np.diag(s)), v)
np.allclose(w, w1)


Out[34]:
True

In [35]:
new_diag = rnd.normal(loc=1., scale=0.01, size=(n,))

In [36]:
new_diag


Out[36]:
array([ 1.00237858,  0.98360907,  0.99721865,  1.01399238,  0.98384892])

In [37]:
w2 = np.dot(np.dot(u, np.diag(new_diag)), v)

In [39]:
npz = np.load("/home/galvan/development/RNNs/models/temporal_order_plain, min_length: 150_2_14/best_model.npz")
W_rec = npz["W_rec"]

In [43]:
w_ = w2.copy()
print(conditioning(w_))
for _ in range(20):
    print(conditioning(w_))
    w_ = np.dot(w_, w_)


1.01168263385
1.01168263385
1.02350175163
1.04755583558
1.09737322867
1.204228003
1.4501650832
2.10297876853
4.42251970087
19.5586805046
382.541983081
146338.36882
21414934577.7
9.0679304157e+16
9.77791383558e+16
inf
inf
1.30095764811e+17
inf
/home/galvan/builds/anaconda3/lib/python3.5/site-packages/ipykernel/__main__.py:3: RuntimeWarning: divide by zero encountered in double_scalars
  app.launch_new_instance()
---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-43-e3e51080c9d7> in <module>()
      2 print(conditioning(w_))
      3 for _ in range(20):
----> 4     print(conditioning(w_))
      5     w_ = np.dot(w_, w_)

<ipython-input-30-93d89efa1175> in conditioning(w)
      1 def conditioning(w):
----> 2     eig_values = np.abs(np.linalg.eigvals(w))
      3     cond = max(eig_values) / min(eig_values)
      4     return cond

/home/galvan/builds/anaconda3/lib/python3.5/site-packages/numpy/linalg/linalg.py in eigvals(a)
    901     _assertRankAtLeast2(a)
    902     _assertNdSquareness(a)
--> 903     _assertFinite(a)
    904     t, result_t = _commonType(a)
    905 

/home/galvan/builds/anaconda3/lib/python3.5/site-packages/numpy/linalg/linalg.py in _assertFinite(*arrays)
    215     for a in arrays:
    216         if not (isfinite(a).all()):
--> 217             raise LinAlgError("Array must not contain infs or NaNs")
    218 
    219 def _assertNoEmpty2d(*arrays):

LinAlgError: Array must not contain infs or NaNs

In [ ]:


In [ ]: