def train(self): error = tensor.neq(self.y.flatten(), self.y_hat.flatten() > 0.5).mean() error.name = 'error' self.error = error experiment = Experiment(self.params['model_name'], self.train_stream) experiment.cost = self.cost experiment.set_adam(self.params['learning_rate']) experiment.add_printing(after_epoch=True) experiment.monitor_f_score(self.y, self.y_hat, average='macro', threshold=self.params['threshold']) experiment.monitor_auc_score(self.y, self.y_hat, average='macro') experiment.add_timing() experiment.extensions.append( EarlyStopping('dev_f_score', epochs=self.params['n_epochs'], choose_best=max)) weights = VariableFilter(theano_name='W')(experiment.cg.variables) experiment.regularize_max_norm(self.params['max_norms'], weights) experiment.apply_dropout(self.params['dropout']) experiment.track_best('dev_f_score', save_path=self.params['model_name'] + '.tar', choose_best=max) experiment.track_best('dev_cost', save_path=self.params['model_name'] + '_cost.tar') experiment.plot_channels(channels=[ ['tra_f_score', 'dev_f_score'], ['tra_cost', 'dev_cost'], ], url_bokeh='http://localhost:5006/', before_first_epoch=True, after_epoch=True) experiment.add_monitored_vars([error]) experiment.add_norm_grads_vars() experiment.monitor_stream(self.train_stream, prefix='tra', after_epoch=True) experiment.monitor_stream(self.dev_stream, prefix='dev') self.experiment = experiment print('# of params for the model: {0}'.format( experiment.get_num_params())) main_loop = experiment.get_main_loop() if not os.path.isfile(self.params['model_name'] + '.tar'): main_loop.run() with open(self.params['model_name'] + '.tar', "rb") as f: print('loading saved model...') main_loop.model.set_parameter_values(load_parameters(f))