谁能解释一下 "out = self(images)" 在下面的代码中做了什么

can anyone explain what "out = self(images)" do in below code

我无法理解,如果预测是用正向方法计算的,那么为什么需要“out = self(images)”以及它会做什么。我对这段代码有点困惑。

class MnistModel(nn.Module):
def __init__(self):
    super().__init__()
    self.linear = nn.Linear(input_size, num_classes)
    
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)                  # Generate predictions
    loss = F.cross_entropy(out, labels) # Calculate loss
    return loss

def validation_step(self, batch):
    images, labels = batch 
    out = self(images)                    # Generate predictions
    loss = F.cross_entropy(out, labels)   # Calculate loss
    acc = accuracy(out, labels)           # Calculate accuracy
    return {'val_loss': loss, 'val_acc': acc}
    
def validation_epoch_end(self, outputs):
    batch_losses = [x['val_loss'] for x in outputs]
    epoch_loss = torch.stack(batch_losses).mean()   # Combine losses
    batch_accs = [x['val_acc'] for x in outputs]
    epoch_acc = torch.stack(batch_accs).mean()      # Combine accuracies
    return {'val_loss': epoch_loss.item(), 'val_acc': epoch_acc.item()}

def epoch_end(self, epoch, result):
    print("Epoch [{}], val_loss: {:.4f}, val_acc: {:.4f}".format(epoch, result['val_loss'], result['val_acc']))

模型 = MnistModel()

在Python中,self指的是你从class创建的实例(类似于Java和C++中的this)。实例是 callable,这意味着如果方法 __call__ 已被覆盖,它可以像函数本身一样被调用。

示例:

class A:
    def __init__(self):
        pass
    def __call__(self, x, y):
        return x + y

a = A()
print(a(3,4)) # Prints 7

在您的例子中,__call__ 方法是 在超级 class nn.Module 中实现的。 由于它是一个神经网络模块,因此需要一个输入占位符。 "out" 是将要转发模块输出到模型的下一层或模块的数据的占位符。

nn.Module class 实例(以及从 class 继承的实例)的情况下,forward 方法用作 __call__ 方法。至少在相对于 nn.Module class.

定义的地方