Я хочу использовать нелинейную активацию ReLU1. ReLU1 линейно в [0,1], но фиксирует значения меньше 0 до 0 и зажимает значения больше 1 до 1 .
Он будет использоваться только для последний слой моего глубокого net в PyTorch с действительно высоким разрешением 2048x4096
. Поскольку код должен быть сильно оптимизирован с точки зрения скорости и памяти, я не знаю, какая из следующих реализаций будет лучшей.
Ниже приведены две реализации, которые я могу придумать для тензора x
: -
x.clamp_(min=0.0, max=1.0)
Для этого я не могу увидеть исходный код, указанный в его документах . Так что не знаю, лучший ли это выбор. Я предпочитаю работу на месте, так как через нее может происходить обратное распространение.
Вторая альтернатива, которая у меня есть, - использовать torch.nn.functional.hardtanh_(x, min_val=0.0, max_val=1.0)
. Это определенно действующая функция, и в исходном коде указано, что она использует файл C ++ torch._C._nn.hardtanh(input, min_val, max_val)
, поэтому я думаю, что это будет быстро.
Пожалуйста, предложите, какая реализация является наиболее эффективной и, если возможно, другую.
Спасибо