아직까지 필요성을 크게 느끼지는 못하지만, 내가 정의할 Class의 객체에 대해 연산자를 활용해서 사용자에게도 직관적인 연산을 정의할 수 있다면, 해당 매직메소드들을 활용할 수 있을 것이다. 간단하게만 정리해두자.
__add__
, __mul__
, __sub__
:__add__
, __mul__
, __sub__
는 각각 “+”, “_”, “-” 연산자를 활용한 기능을 정의하는 method 이다.
__le__
, __ge__
:
Pytorch기준으로, 실제로 nn.module를 상속받아 CustomLoss를 정의할 때는, forward 메소드의 결과값으로 torch.tensor 이 반환될 것이고 이러한 torch.tensor Class 내에서 연산기호에 대한 연산을 정의하고 있으므로 CustomLoss Class내에서 우리가 해당 magic method 들을 overriding 해서 활용할 일은 거의 없을 것이다
class MyCustomLoss:
def __init__(self, outputs):
self._loss = outputs["loss"]
def __add__(self, loss_inst):
return self._loss + loss_inst._loss
def __mul__(self, loss_inst):
return self._loss * loss_inst._loss
def __sub__(self, loss_inst):
return self._loss - loss_inst._loss
def __le__(self, loss_inst):
return self._loss <= loss_inst._loss
def __ge__(self, loss_inst):
return self._loss >= loss_inst._loss
classifier1_output = {"loss": 0.5}
classifier2_output = {"loss": 0.2}
myloss1 = MyCustomLoss(classifier1_output)
myloss2 = MyCustomLoss(classifier2_output)
print(myloss1 + myloss2) # 0.7
print(myloss1 * myloss2) # 0.1
print(myloss1 - myloss2) # 0.3
print(myloss1 <= myloss2) # False
print(myloss1 >= myloss2) # True
Python 자료구조의 category (Sequence, Container, Flat, Mutable, Immutable) (0) | 2022.04.17 |
---|---|
Magic Method (4) - __bool__ (0) | 2022.04.16 |
Magic Method (2) - __str__ 과 __repr__ (0) | 2022.04.14 |
Magic Method (1) - Magic Method의 정의 (0) | 2022.04.13 |
주석을 보여주는 __doc__ (0) | 2022.04.12 |
댓글 영역