Source code for epynn.network.report

# EpyNN/epynn/network/report.py
# Standard library imports
import time

# Related third party imports
from tabulate import tabulate
from termcolor import cprint

# Local application/library specific imports
from epynn.network.evaluate import batch_evaluate
from epynn.commons.logs import (
    current_logs,
    dsets_samples_logs,
    dsets_labels_logs,
    headers_logs,
    initialize_logs_print,
    layers_lrate_logs,
    layers_others_logs,
    network_logs,
    start_counter
)


[docs]def model_report(model): """Report selected metrics for datasets at current epoch. :param model: An instance of EpyNN network object. :type model: :class:`epynn.network.models.EpyNN` """ # You may edit the colorscheme to fulfill your preference colors = [ 'white', 'green', 'red', 'magenta', 'cyan', 'yellow', 'blue', 'grey', ] # Rows in tabular report excluding headers size_table = 11 # Initialize list of rows with headers if model.e == 0 or not hasattr(model, 'current_logs'): model.current_logs = [headers_logs(model, colors)] # Check if last epoch eLast = (model.e == model.epochs - 1) # Append row one every verboseth epoch or if last epoch if model.e % model.verbose == 0 or eLast: model.current_logs.append(current_logs(model, colors)) # Report on terminal if len(model.current_logs) == size_table + 1 or eLast: logs = tabulate(model.current_logs, headers="firstrow", numalign="center", stralign='center', tablefmt="pretty", ) print('\n') print (logs, flush=True) # Clear-up del model.current_logs return None
[docs]def single_batch_report(model, batch, A): """Report accuracy and cost for current batch. :param model: An instance of EpyNN network. :type model: :class:`epynn.network.models.EpyNN` :param batch: An instance of batch dataSet. :type batch: :class:`epynn.commons.models.dataSet` :param A: Output of forward propagation for batch. :type A: :class:`numpy.ndarray` """ current = time.time() # Total elapsed time elapsed_time = round(current - model.ts, 2) # Time for one epoch based on current batch epoch_time = (current - model.cts) * len(model.embedding.batch_dtrain) model.cts = current # Epochs per second rate = round((model.e + 1) / (elapsed_time + 1e-16), 3) # Time until completion ttc = round((model.epochs - model.e + 1) / (rate + 1e-16)) # Accuracy and cost accuracy, cost = batch_evaluate(model, batch.Y, A) accuracy = round(accuracy, 3) cost = round(cost, 5) # Current batch numerical identifier batch_counter = batch.name + '/' + model.embedding.batch_dtrain[-1].name # Format and print data rate = '{:.2e}'.format(rate) log = ('Epoch %s - Batch %s - Accuracy: %s Cost: %s - TIME: %ss RATE: %se/s TTC: %ss' % (model.e, batch_counter, accuracy, cost, elapsed_time, rate, ttc)) cprint('{: <100}'.format(log), 'white', attrs=['bold'], end='\r', flush=True) return None
[docs]def initialize_model_report(model, timeout): """Report exhaustive initialization logs for datasets, model architecture and shapes, layers hyperparameters. :param model: An instance of EpyNN network. :type model: :class:`epynn.network.models.EpyNN` :param timeout: Time to hold on initialization logs. :type timeout: int """ model.init_logs = [] # Dataset initialization logs dsets = model.embedding.dsets se_dataset = model.embedding.se_dataset model.init_logs.append(dsets_samples_logs(dsets, se_dataset)) model.init_logs.append(dsets_labels_logs(dsets)) # Model architecture and shapes initialization logs network = model.network model.init_logs.append(network_logs(network)) # Model and layer hyperparameters initialization logs layers = model.layers model.init_logs.append(layers_lrate_logs(layers)) model.init_logs.append(layers_others_logs(layers)) initialize_logs_print(model) start_counter(timeout) return None