def test_tucker_tensor():
"""test for random.tucker_tensor"""
shape = (10, 11, 12)
rank = 4
tensor = tucker_tensor(shape, rank, full=True)
for i in range(T.ndim(tensor)):
T.assert_equal(matrix_rank(T.to_numpy(unfold(tensor, i))), rank)
core, factors = tucker_tensor(shape, rank, full=False)
for i, factor in enumerate(factors):
T.assert_equal(factor.shape, (shape[i], rank),
err_msg=('{}-th factor has shape {}, expected {}'.format(
i, factor.shape, (shape[i], rank))))
shape = (10, 11, 12)
rank = (6, 4, 5)
tensor = tucker_tensor(shape, rank, full=True)
for i in range(T.ndim(tensor)):
T.assert_equal(matrix_rank(T.to_numpy(unfold(tensor, i))), min(shape[i], rank[i]))
core, factors = tucker_tensor(shape, rank, full=False)
for i, factor in enumerate(factors):
T.assert_equal(factor.shape, (shape[i], rank[i]),
err_msg=('{}-th factor has shape {}, expected {}.'.format(
i, factor.shape, (shape[i], rank[i]))))
T.assert_equal(core.shape, rank, err_msg='core has shape {}, expected {}.'.format(
core.shape, rank))
for factor in factors:
T.assert_array_almost_equal(T.dot(T.transpose(factor), factor), T.tensor(np.eye(factor.shape[1])))
tensor = tucker_to_tensor(core, factors)
reconstructed = multi_mode_dot(tensor, factors, transpose=True)
T.assert_array_almost_equal(core, reconstructed)
with T.assert_raises(ValueError):
tucker_tensor((3, 4, 5), (3, 6, 3))
评论列表
文章目录