Anotaciones de código para el detector de transformadores Swin en mmdetection

En primer lugar, permítanme hablar sobre las dos preguntas que hizo un pequeño socio antes:

¿Por qué necesita escribir la función forward() cada vez que define una red y no es una función especial de python?

Respuesta: Debido a que nuestra clase principal de red es la clase nn.Module (la última versión de mmdetection es la clase BaseModule), y la clase nn.Module define el método __call__(), que llama a la función forward(). Por lo tanto, cuando se ejecuta module(data), se llama automáticamente a la función __call__().

class Module(nn.Module):
    def __init__(self):
        super(Module, self).__init__()
        # ......
    def forward(self, x):
        # ......
        return x

data = .....  #输入数据
module = Module()# 实例化一个对象
module(data)  # 前向传播
"""
    而不是使用module.forward(data)
    而实际上 module(data) 和 module.forward(data) 是等价的
"""

Nota: En Python, cualquier cosa que pueda aplicarse directamente () a sí mismo y ejecutarlo se denomina objeto invocable. Si el método __call__() se implementa en la clase, el objeto de instancia de la clase se puede convertir en un objeto invocable. Para objetos invocables y

Supongo que te gusta

Origin blog.csdn.net/qq_42308217/article/details/123470974
Recomendado
Clasificación