예제 #1
0
    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))