Можно ли определить функцию функции активации? Я пытался сделать:

def activation():
    # return nn.Sin()
    # return nn.Tanh()
    # return nn.Sigmoid()
    # return nn.Tanhshrink()
    return nn.HardTanh(-1,1)
    # return nn.Hardswish()
    # return nn.functionnal.silu()

Но я получаю сообщение об ошибке при попытке вызвать его. Вот пример:

def f():
  return nn.Tanh()
input = torch.randn(2)
output = f(input)
print(output)

Он выводит «TypeError: f() принимает 0 позиционных аргументов, но был задан 1». Это не работает, даже я дал ему аргумент x.

0
Rasule 4 Фев 2022 в 13:35
Неясно, чего вы пытаетесь достичь. f = nn.Tanh?
 – 
timgeb
4 Фев 2022 в 13:40
Да, это def f(): return nn.Tanh() input = torch.randn(2) output = f()(input) print(output), потому что f возвращает объект.
 – 
Rasule
4 Фев 2022 в 13:56

2 ответа

Лучший ответ

Вы можете использовать объектно-ориентированный подход:

>>> f = nn.Tanh()
>>> output = f(x)

Или функциональный подход, где вы найдете эквивалент для nn.Tanh внутри nn.functional как tanh.

>>> f = nn.functional.tanh
>>> output = f(x)
1
Ivan 4 Фев 2022 в 14:47
В качестве альтернативы (но бесполезно) OP может использовать код, который у них есть сейчас, но вызывать с помощью f()(input).
 – 
erip
4 Фев 2022 в 15:42

Действительно, вы не предоставляете аргумент функции. Это то, что вы пытаетесь сделать?

def f(x):
  return nn.Tanh(x)
0
Vladimir Ryabtsev 4 Фев 2022 в 13:41
Это так не работает, потому что f возвращает объект
 – 
Rasule
4 Фев 2022 в 13:56
Я исправил это с помощью def f(): return nn.Tanh() input = torch.randn(2) output = f()(input) print(output)
 – 
Rasule
4 Фев 2022 в 13:57