def _run_minibatch(self, y, mask): D = self.D.copy() start_iter = 31 it, D, x = nmf.solve( self.y, D, x=None, tol=1.0e-6, minibatch=30, maxiter=start_iter, method=self.method, likelihood=self.likelihood, mask=mask, random_seed=0) start_error = self.error(x, D, mask=mask) assert not allclose(x, xp.zeros_like(x), atol=1.0e-5) # make sure the iteration reduces the error errors = [] for i in range(10): print('trial ', i) it, D, x = nmf.solve( self.y, D, x=x, tol=1.0e-6, minibatch=30, maxiter=self.maxiter, method=self.method, likelihood=self.likelihood, mask=mask, random_seed=0) # just make sure the loss is decreasing error = self.error(x, D, mask=mask) assert not allclose(x, xp.zeros_like(x), atol=1.0e-5) assert error < start_error errors.append(error) # make sure errors are decreasing in average errors = np.array(errors) assert np.mean(errors[:4]) > np.mean(errors[-4:])
def test_minibatch_mask(self, method, all_xp=False): D = xp.array(self.D) y = xp.array(self.y) if all_xp else self.y mask = xp.array(self.mask) if all_xp else self.mask it, D, x = nmf.solve(y, D, tol=1.0e-10, method=method, maxiter=self.maxiter, mask=mask, minibatch=self.minibatch)
def run_fullbatch(self, mask): D = self.D.copy() it, D, x = nmf.solve(self.y, D, x=None, tol=1.0e-6, minibatch=None, maxiter=self.maxiter, method=self.method, likelihood=self.likelihood, mask=mask, random_seed=0) assert it < self.maxiter - 1 self.assert_minimum(x, D, tol=1.0e-5, n=100, mask=mask) assert not allclose(x, xp.zeros_like(x), atol=1.0e-5)
def test_mask(self, method): it, D, x = nmf.solve(xp.array(self.y), xp.array(self.D), tol=1.0e-10, method=method, maxiter=self.maxiter, mask=xp.array(self.mask))
def test_minibatch(self, method, all_xp=False): D = xp.array(self.D, dtype=np.float32) y = xp.array(self.y, dtype=np.float32) if all_xp else self.y it, D, x = nmf.solve(y, D, tol=1.0e-10, method=method, maxiter=self.maxiter, minibatch=self.minibatch)