def fit(self, X_train, y_train): for i in range(self.epochs): # update epochs for modified rms updater self.layers[1].updater.iteration = i self.layers[2].updater.iteration = i X_train, y_train = shuffle(X_train, y_train) for X, y in yield_batches(X_train, y_train, self.batchsize): self._fit(X, y)
def fit_test(self, X_train, y_train, X_test, y_test, Scaler): # evaluate before starting training self._evaluate(X_test, y_test, 0, 0, Scaler) for i in range(self.epochs): start = time.time() # update epochs for modified rms updater for l in self.layers: l.epoch = i X_train, y_train = shuffle(X_train, y_train) for X, y in yield_batches(X_train, y_train, self.batchsize): self._fit(X, y) duration = time.time() - start self._evaluate(X_test, y_test, i + 1, duration, Scaler)
def _evaluate(self, X_test, y_test, epoch, duration, Scaler): self.layers[1].b_test = True result = [] target = [] for X, y in yield_batches(X_test, y_test, self.batchsize): users = X[:, 0] movies = X[:, 1] ratings = y pred = Scaler.inv(self.predict(users, movies)) result.extend(pred) target.extend(ratings) print(np.min(result), np.mean(result), np.max(result)) val_error = RMSE(target, np.clip(result, 1, 5)) self.validation.append(val_error) print('epoch: {:>2d} | test error: {:>1.5f} | time: {:>5.2f}'.format( epoch, val_error, duration))