在训练期间更改 Dropout 值

Changing Dropout value during training

如何在训练期间更改 Dropout?例如

Dropout= [0.1, 0.2, 0.3]

我尝试将其作为列表传递,但我无法使其正常工作。

要在训练期间更改丢失概率,您应该使用 functional 版本,即 torch.nn.functional.dropout

dropout 函数式版本的输入参数是

  • 输入张量
  • 辍学概率(您可以更改)
  • 一个布尔值来指示它是否处于训练模式(您可以使用 self.training
  • 和一个标志,指示您是否希望就地执行操作。

因此,您可以根据需要在 forward 方法中更改丢失的概率。

例如,您可以在 forward 方法中执行:


def forward(self, x):

    ...

    # apply some layers to the input
    h = self.my_layers(x)

    # set the value of p
    p = self.get_value_for_p()

    # apply dropout with new p
    h = torch.nn.functional.dropout(h, p, self.training)

    ...

更多关于 dropout 的功能版本,这里:https://pytorch.org/docs/stable/nn.functional.html#dropout-functions

也可以直接访问Dropoutclass的属性:

def forward(self, x, p=0.5):
    self.dropout_layer.p = p
    x = self.layers1(x)
    x = self.dropout_layer(x)
    x = self.layers2(x)
    return x

显示此方法有效的示例:

layer = torch.nn.Dropout(p=0.2)
x = torch.rand()
layer(x) # tensor([0.0680, 0.0000, 1.4633, 6.5492, 0.0000])
layer.p = 0.9
layer(x) # tensor([0.0000, 0.0000, 0.0000, 6.5492, 0.0000])