В чем разница между типом слоя и его функцией активации в PyTorch?

Я пытаюсь написать простую нейронную сеть с помощью 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

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


person MefAldemisov    schedule 13.05.2019    source источник


Ответы (1)


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

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

model = nn.Sequential(
    nn.Linear(n_in, n_out),
    nn.Tanh()
)
output = model(input)
person Wasi Ahmad    schedule 14.05.2019