在训练期间更改 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
也可以直接访问Dropout
class的属性:
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])
如何在训练期间更改 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
也可以直接访问Dropout
class的属性:
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])