Функция torch.nn.Tanh в PyTorch

PyTorch torch.nn 参考手册Справочное руководство PyTorch torch.nn


torch.nn.TanhЭто функция активации гиперболического тангенса в PyTorch.

Он отображает входные значения в диапазон от -1 до 1, выход центрирован относительно нуля, и он обычно используется в рекуррентных нейронных сетях.

Определение функции

torch.nn.Tanh()

Математический принцип

Tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

Примеры использования

Пример 1: Базовое использование

Пример

import torch
import torch.nn as nn

tanh = nn.Tanh()

x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = tanh(x)

print("Input:", x.tolist())
print("Вывод:", output.tolist())
print("Свойства: диапазон вывода [-1, 1], центрирован относительно нуля")

Пример 2: Использование в LSTM

Пример

import torch
import torch.nn as nn

class SimpleLSTMCell(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(SimpleLSTMCell, self).__init__()
        self.hidden_size = hidden_size

        # Механизм вентилей использует Tanh и Sigmoid
        self.tanh = nn.Tanh()
        self.sigmoid = nn.Sigmoid()

    def forward(self, x, hidden):
        h, c = hidden
        # Упрощённое вычисление гейтов
        gates = self.sigmoid(x @ torch.randn(x.shape[1], self.hidden_size * 4))
        # Tanh используется для памяти кандидата
        candidate = self.tanh(x @ torch.randn(x.shape[1], self.hidden_size))
        return candidate, torch.zeros_like(h)

#
cell = SimpleLSTMCell(10, 20)
x = torch.randn(1, 10)
h = torch.randn(1, 20)
c = torch.randn(1, 20)

new_h, new_c = cell(x, (h, c))
print("Форма входа:", x.shape)
print("Форма скрытого состояния:", new_h.shape)

Пример 3: Сравнение с Sigmoid

Пример

import torch
import torch.nn as nn
import numpy as np

x = np.linspace(-3, 3, 11)
x_tensor = torch.tensor(x, dtype=torch.float32)

sigmoid = nn.Sigmoid()
tanh = nn.Tanh()

print("x       Sigmoid    Tanh")
print("-" * 35)
for i in range(0, 11, 2):
    xi = x_tensor[i:i+2]
    print(f"{xi[0].item():5.1f} {sigmoid(xi)[0].item():9.4f} {tanh(xi)[0].item():9.4f}")

ЧАВО

Вопрос 1: В чём разница между Tanh и Sigmoid?

Tanh выдаёт значения в диапазоне [-1,1] (с нулевым центром), Sigmoid выдаёт [0,1].

Вопрос 2: Почему LSTM использует Tanh?

Свойство Tanh с нулевым центром делает поток градиентов более стабильным.


Сценарии использования

  • Рекуррентные нейронные сети: активация по умолчанию для LSTM, GRU
  • Генеративные модели: генератор GAN
  • Механизм вентилей: управление диапазоном информации

PyTorch torch.nn 参考手册Справочное руководство PyTorch torch.nn

Другие расширения