谁能解释一下 "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.
定义的地方
我无法理解,如果预测是用正向方法计算的,那么为什么需要“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.