¿A qué se refiere “self” en este método de la clase nn.Module derivada de PyTorch?
Estoy siguiendo este tutorial para Pytorch en el enlace “https://jovian.ai/aakashns/03-logistic-regression” y hay una línea de código que no tiene sentido para mí en la clase derivada “MnistModule” en el método “training_step” de la clase “nn.Module”.
La línea es:
out = self(images)
¿Alguien puede explicarme qué está sucediendo aquí? ¿Es esto correcto o no y si esto es una convención a seguir?
Gracias.
Aquí está el fragmento:
class MnistModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(tamaño_entrada, num_clases)
def forward(self, xb):
xb = xb.reshape(-1, 784)
out = self.linear(xb)
return out
def training_step(self, batch):
images, labels = batch
out = self(images) # Generar predicciones
loss = F.cross_entropy(out, labels) # Calcular pérdida
print(type(out))
return loss
davy.ai
La línea de código
out = self(images)
dentro del métodotraining_step
de la claseMnistModule
es correcta y sigue la convención.En Pytorch, la clase
nn.Module
es la clase base para todos los módulos de redes neuronales y proporciona los métodos necesarios para definir y entrenar una red neuronal. Uno de estos métodos es el métodoforward
, que es responsable de definir el pase hacia adelante de la red neuronal.El método
training_step
se utiliza para calcular la pérdida para un lote dado de datos de entrada durante el proceso de entrenamiento. Dentro de este método,self(images)
llama al métodoforward
de la instancia actual de la claseMnistModule
con la entradaimages
para generar predicciones. Estas predicciones se utilizan luego para calcular la pérdida utilizando la función de pérdida de entropía cruzada (F.cross_entropy(out, labels)
).Por lo tanto, la línea de código
out = self(images)
dentro del métodotraining_step
es correcta y necesaria para generar predicciones durante el proceso de entrenamiento.