torchliter.engine.auto
Cart
The Cart
helper object that temporarily stores the engine components and attributes.
kwargs
to get the attachments as a kwargs dictattach(**kwargs)
to attach attributes in bulkCart.__init__
__init__(*args: Any, **kwargs: Any)
Cart.attach
attach(*args, **kwargs)
Cart.parse_buffers
parse_buffers(
step_function: Generator,
mode: Optional[str] = None,
buffer_type: Optional[torchliter.engine.buffers.BufferBase] = None,
**kwargs
)
AutoEngine
AutoEngine class.
Example Usage:
import torch
import torch.nn as nn
import torch.nn.functional as F
cart = torchliter.Cart()
cart.model = nn.Linear(1, 3)
cart.train_loader = torch.utils.data.DataLoader(
[i for i in range(100)], batch_size=5
)
cart.eval_loader = torch.utils.data.DataLoader(
[i for i in range(100)], batch_size=5
)
cart.optimizer = torch.optim.AdamW(
cart.model.parameters(), lr=1e-3, weight_decay=1e-5
)
def train_step(_, batch, **kwargs):
image, target = batch
logits = _.model(image)
loss = F.cross_entropy(logits, target)
_.optimizer.zero_grad()
loss.backward()
_.optimizer.step()
yield "cross entropy loss", loss.item()
acc = (logits.max(-1).indices == target).float().mean()
yield "train acc", acc.item()
def eval_step(_, batch, **kwargs):
image, target = batch
with torch.no_grad():
logits = _.model(image)
acc = (logits.max(-1).indices == target).float().mean()
yield "eval acc", acc.item()
def hello(_):
print("hello")
train_buffers = torchliter.engine.AutoEngine.auto_buffers(
train_step, torchliter.buffers.ExponentialMovingAverage
)
eval_buffers = torchliter.engine.AutoEngine.auto_buffers(
eval_step, torchliter.buffers.ScalarSummaryStatistics
)
TestEngineClass = torchliter.engine.AutoEngine.build(
"TestEngine", train_step, eval_step, print_hello=hello
)
test_engine = TestEngineClass(**{**cart.kwargs, **train_buffers, **eval_buffers})
AutoEngine.__init__
__init__(*events, **kwargs)
AutoEngine.attach
attach(*events, **kwargs)
AutoEngine.auto_buffers
auto_buffers(
step_function: Generator,
buffer_type: torchliter.engine.buffers.BufferBase,
**buffer_kwargs
)
AutoEngine.build
build(
engine_type_name: str,
train_step: Optional[Callable] = None,
eval_step: Optional[Callable] = None,
**methods_to_attach: Callable
) → Type
AutoEngine.eval_step
eval_step(batch: Any, **kwargs: Any) → Generator
if the eval_step is a generator function, convert it to a method that pipes streaming outputs to buffer classes in buffer_registry
Parameters ———- batch : Any Batch item
Yields —— Generator Tuple[str, Union[float, Tensor]]
AutoEngine.per_batch
per_batch(batch: Union[Tuple[Any], Dict[str, Any]], **kwargs: Any)
AutoEngine.train_step
train_step(batch: Any, **kwargs: Any) → Generator
if the train_step is a generator function, convert it to a method that pipes streaming outputs to buffer classes in buffer_registry
Parameters ———- batch : Any Batch item
Yields —— Generator Tuple[str, Union[float, Tensor]]