Losses
- class todd.models.losses.BCELoss[source]
Bases:
FunctionalLoss
- class todd.models.losses.BCEWithLogitsLoss[source]
Bases:
FunctionalLoss
- class todd.models.losses.BaseLoss[source]
Bases:
BuildPreHookMixin,Module,ABC- __init__(reduction=Reduction.MEAN, weight=1.0, bound=None, **kwargs)[source]
- Parameters:
reduction (str | Reduction)
weight (float | BaseScheduler)
bound (float | None)
- Return type:
None
- classmethod build_pre_hook(config, registry, item)[source]
- Parameters:
config (Config)
registry (RegistryMeta)
item (Item)
- Return type:
Config
- property reduction: Reduction
- class todd.models.losses.BaseScheduler[source]
Bases:
ModuleBase class for schedulers.
Under most cases, schedulers are used as a variable loss weight. Schedulers are functions of
steps, which could mean iterations or epochs. Users could incrementstepsby callingstep, or directly set thestepsproperty. Call the scheduler to get the value for the current step.The value of this scheduler is always the
gain:>>> base_scheduler = BaseScheduler(gain=5) >>> base_scheduler() 5.0 >>> base_scheduler.step() >>> base_scheduler() 5.0
- __init__(*args, gain=1.0, **kwargs)[source]
Initialize.
- Parameters:
gain (float) – multiplier to the scheduler value.
- Return type:
None
- class todd.models.losses.ChainedScheduler[source]
Bases:
ComposedSchedulerChained scheduler.
Schedulers are chained in an multiplicative manner:
>>> warmup = WarmupScheduler(end=5, gain=10) >>> step = StepScheduler(milestones=[3, 4], gamma=0.1) >>> chained = ChainedScheduler(schedulers=[warmup, step]) >>> for _ in range(5): ... print(round(chained(), 6)) ... chained.step() 2.0 4.0 0.6 0.08 0.1
- class todd.models.losses.ComposedScheduler[source]
Bases:
BuildPreHookMixin,BaseScheduler- __init__(*args, schedulers, **kwargs)[source]
- Parameters:
schedulers (Iterable[BaseScheduler])
- Return type:
None
- class todd.models.losses.CosineAnnealingScheduler[source]
Bases:
BaseSchedulerCosine annealing scheduler.
The value anneals as the cosine function is defined. The first step starts with 1. After
durationsteps, the value becomes 0. The best practice is to setdurationto the total number of steps.>>> cosine = CosineAnnealingScheduler(duration=5) >>> for _ in range(6): ... print(round(cosine(), 6)) ... cosine.step() 1.0 0.904508 0.654508 0.345492 0.095492 0.0
- class todd.models.losses.CosineEmbeddingLoss[source]
Bases:
FunctionalLoss
- class todd.models.losses.CrossEntropyLoss[source]
Bases:
FunctionalLoss
- class todd.models.losses.DecayScheduler[source]
Bases:
WarmupSchedulerDecay scheduler.
Before or at
start, the value is 1. After or atend, the value is 0. In between, the value is interpolated.>>> decay = DecayScheduler(start=2, end=7) >>> for _ in range(8): ... print(round(decay(), 1)) ... decay.step() 1.0 1.0 0.8 0.6 0.4 0.2 0.0 0.0
- class todd.models.losses.DeferScheduler[source]
Bases:
JumpMixin,WarmupScheduler
- class todd.models.losses.EarlyStopScheduler[source]
Bases:
JumpMixin,DecaySchedulerEarly stop.
At some point, the value drops to 0 from 1.
>>> early_stop = EarlyStopScheduler(at=3) >>> for _ in range(5): ... print(early_stop()) ... early_stop.step() 1.0 1.0 0.0 0.0 0.0
- class todd.models.losses.FunctionalLoss[source]
Bases:
BaseLoss
- class todd.models.losses.L1Loss[source]
Bases:
NormMixin,FunctionalLoss
- class todd.models.losses.MSELoss[source]
Bases:
NormMixin,FunctionalLoss
- class todd.models.losses.NormMixin[source]
Bases:
FunctionalLoss,ABC
- class todd.models.losses.SchedulerRegistry[source]
Bases:
LossRegistry- data = {'BaseScheduler': <class 'todd.models.losses.schedulers.BaseScheduler'>, 'ChainedScheduler': <class 'todd.models.losses.schedulers.ChainedScheduler'>, 'CosineAnnealingScheduler': <class 'todd.models.losses.schedulers.CosineAnnealingScheduler'>, 'DecayScheduler': <class 'todd.models.losses.schedulers.DecayScheduler'>, 'DeferScheduler': <class 'todd.models.losses.schedulers.DeferScheduler'>, 'EarlyStopScheduler': <class 'todd.models.losses.schedulers.EarlyStopScheduler'>, 'SequentialScheduler': <class 'todd.models.losses.schedulers.SequentialScheduler'>, 'StepScheduler': <class 'todd.models.losses.schedulers.StepScheduler'>, 'WarmupScheduler': <class 'todd.models.losses.schedulers.WarmupScheduler'>}
- class todd.models.losses.SequentialScheduler[source]
Bases:
ComposedScheduler- property scheduler: BaseScheduler
- class todd.models.losses.StepScheduler[source]
Bases:
BaseSchedulerStep scheduler.
The value is multiplied by \(gamma\) at every milestone:
>>> step = StepScheduler(milestones=[3, 4], gamma=0.1) >>> for _ in range(5): ... print(round(step(), 2)) ... step.step() 1.0 1.0 0.1 0.01 0.01
- class todd.models.losses.WarmupScheduler[source]
Bases:
BaseSchedulerWarmup scheduler.
The value will linearly increase from 0 to 1. At step
end, the value is 1.>>> warmup = WarmupScheduler(end=5) >>> for _ in range(7): ... print(warmup()) ... warmup.step() 0.2 0.4 0.6 0.8 1.0 1.0 1.0