Skip to main content

record-keeper

Installation

pip install record-keeper

The Problem:

When running machine-learning experiments, having more logged data is usually better than less. But adding new series of data to log can often require changes to your training code. When you want to log dozens of different series of data, your code starts to look awful.

The Solution:

Use RecordKeeper, and easily add loggable information when you write a new class. The example below is taken from the pytorch-metric-learning library.

First, create a list that contains the names of the attributes you want to record (self.record_these in the example below).

class ContrastiveLoss(GenericPairLoss):
    def __init__(self, pos_margin=0, neg_margin=1, use_similarity=False, power=1, avg_non_zero_only=True, **kwargs):
        ...
        self.num_non_zero_pos_pairs = 0
        self.num_non_zero_neg_pairs = 0
        self.record_these = ["num_non_zero_pos_pairs", "num_non_zero_neg_pairs"]
        ...
    ...

Then tell RecordKeeper the name of the list to read. RecordKeeper will log and save all the attributes described in the list.

from torch.utils.tensorboard import SummaryWriter
import record_keeper as record_keeper_package
from pytorch_metric_learning import losses

record_writer = record_keeper_package.RecordWriter(your_folder_for_logs)
tensorboard_writer = SummaryWriter(log_dir=your_tensorboard_folder)
record_keeper = record_keeper_package.RecordKeeper(tensorboard_writer, record_writer, ["record_these"])

your_loss_dictionary = {"metric_loss": losses.ContrastiveLoss()}

# Then at each iteration of training:
record_keeper.update_records(your_loss_dictionary, current_iteration)

Now the attributes described in record_these, (specifically, num_non_zero_pos_pairs and num_non_zero_neg_pairs) can be viewed on Tensorboard.

nonzero_pairs_example

These data series are also saved in sqlite and CSV format. If you only want to use Tensorboard, then pass in only a SummaryWriter, and vice versa.

The dictionary that you pass into record_keeper.update_records can contain any number of objects, and for each one, RecordKeeper will check if the object has a "record_these" attribute. As long as you're making your dictionaries programmatically, it's possible to add large amounts of loggable data without clogging up your training code. See pytorch-metric-learning and powerful-benchmarker to see RecordKeeper in action.

Release files for record-keeper 0.9.26

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for record-keeper 0.9.26
File Size Uploaded
record-keeper-0.9.26.tar.gz 6.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for record-keeper 0.9.26
File Interpreter ABI Platform
record_keeper-0.9.26-py3-none-any.whl Python 3 none any Details

Total release size: 14.5 kB

Release files / record-keeper-0.9.26.tar.gz

Download URL record-keeper-0.9.26.tar.gz
Size 6.7 kB
Tags Source
SHA-256 checksum
How to use checksums
29951e85b8b82239b2cb2102cd97919013861ea9c21eda53d2c41f091a2c655e
BLAKE2b-256 checksum
How to use checksums
8a89cf8e2034b15fadf0e3c8def03348a732e630ec99a40c914a072b905efd00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0.post20191030 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.5

Release files / record_keeper-0.9.26-py3-none-any.whl

Download URL record_keeper-0.9.26-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78c411799fdb463fa11688235140befbb7ae88be5399fa793a6ba6b097670d61
BLAKE2b-256 checksum
How to use checksums
8d560e646aad413c5b41937104dc07ec28212dd6200510df4911ad4a03936902
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0.post20191030 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.5
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page