Каковы различия между типом слоя и его функцией активации в PyTorch? - PullRequest
2 голосов
/ 13 мая 2019

Я пытаюсь написать простую нейронную сеть, используя pytorch. Я новичок в этой библиотеке. Я столкнулся с двумя способами реализации одной и той же идеи: слой с некоторой фиксированной функцией активации (например, tanh).

Первый способ реализовать это:

l1 = nn.Tanh(n_in, n_out)

Второй способ:

l2 = nn.Linear(n_in, n_out) # linear layer, that do nothing with its input except summation

но при использовании прямого распространения:

import torch.nn.functional as F
x = F.tanh(l2(x)) # x - value that propagates from layer to layer

В чем различия между этими механизмами? Какой из них лучше для каких целей?

1 Ответ

2 голосов
/ 14 мая 2019

Функция активации является просто нелинейной функцией и не имеет никаких параметров. Итак, ваш первый подход не имеет никакого смысла!

Однако вы можете использовать последовательную оболочку для объединения линейного слоя с tanh активацией.

model = nn.Sequential(
    nn.Linear(n_in, n_out),
    nn.Tanh()
)
output = model(input)
...