def train(self, learning_rate=1e-5, steps=200, epoch=10): benchmarks = [] progress = ProgressBar('training', steps) for step in range(steps): if step % epoch == 0: loss, rmse = self.loss() benchmarks.append((step + 1, loss, rmse)) progress.report(step, loss) grad_u, grad_m = self.gradients() self.U = self.U - (learning_rate * grad_u) self.M = self.M - (learning_rate * grad_m) loss, rmse = self.loss() benchmarks.append((step + 1, loss, rmse)) progress.complete() return benchmarks