34 lines
788 B
Python
Executable File
34 lines
788 B
Python
Executable File
import unittest
|
|
import numpy as np
|
|
from prml import nn
|
|
|
|
|
|
class TestTrace(unittest.TestCase):
|
|
|
|
def test_trace(self):
|
|
arrays = [
|
|
np.random.normal(size=(2, 2)),
|
|
np.random.normal(size=(3, 4))
|
|
]
|
|
|
|
for arr in arrays:
|
|
arr = nn.Parameter(arr)
|
|
tr_arr = nn.linalg.trace(arr)
|
|
self.assertEqual(tr_arr.value, np.trace(arr.value))
|
|
|
|
a = np.array([
|
|
[1.5, 0],
|
|
[-0.1, 1.1]
|
|
])
|
|
a = nn.Parameter(a)
|
|
for _ in range(100):
|
|
a.cleargrad()
|
|
loss = nn.square(nn.linalg.trace(a) - 2)
|
|
loss.backward()
|
|
a.value -= 0.1 * a.grad
|
|
self.assertEqual(nn.linalg.trace(a).value, 2)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|