All of the methods defined here are connoted as public (i.e. their names don't begin with `_`), but we really only invoke `.train()` and `.save()` from the outside. Consider making the "supporting" methods private (i.e. prefixing their names with `_`) to give the reader a clear indication of where the entrypoints are.