yell/boltzmann-machines

Custom metrics

SrMouraSilva opened this issue · 0 comments

Continue discussion #7 (comment)

The current lib has a lot of metrics, but in the research is expected try other metrics.

Example:

def my_custom_evaluate_function(metric_name, model, minibatch):
    """Mean of activated units after reconstruction"""
    h_means = model._means_h_given_v(minibatch)
    h0 = self._sample_h_given_v(h_means)
    v_means = model._means_v_given_h(gh)
    v1 = self._sample_v_given_h(v_means)

    with tf.name_scope(metric_name):
        tf.summary.scalar(metric_name, tf.mean(v1, axis=1))  # Maybe axis=1


rbm = BernoulliRBM(n_visible=784, n_hidden=args.n_hidden,
    metrics_config=dict(
        # The default metrics
        msre=True,
        pll=True,
        feg=True,
        train_metrics_every_iter=1000,
        val_metrics_every_epoch=2,
        feg_every_epoch=4,
        n_batches_for_feg=50,
        # New metrics
        my_custom_evaluate=my_custom_evaluate_function
    ),
    verbose=True,
)