summarize_from_feedback/models/ops.py (41 lines of code) (raw):
import math
import torch
from torch import nn
def gelu(x):
return 0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))
def swish(x):
return x * torch.sigmoid(x)
def quick_gelu(x):
return x * torch.sigmoid(1.702 * x)
ACT_FNS = {
"relu": torch.nn.functional.relu,
"swish": swish,
"gelu": gelu,
"quick_gelu": quick_gelu,
"gelu2": quick_gelu,
}
def NormalParameter(n_in, n_out, init_scale=1.0):
"""Parameter with random normal initialization"""
w = torch.empty(n_in, n_out)
nn.init.normal_(w, std=0.02 * init_scale)
return nn.Parameter(w)
class Conv1D(nn.Module):
def __init__(self, n_in, n_out, zero_out=False, bias=True, init_scale=1.0):
super(Conv1D, self).__init__()
assert not zero_out, "This value is deprecated"
self.n_in = n_in
self.n_out = n_out
self.weight = NormalParameter(n_in, n_out, init_scale)
if bias:
self.bias = nn.Parameter(torch.zeros(n_out))
else:
self.bias = None
def forward(self, x):
size_out = (*x.size()[:-1], self.n_out)
if self.bias is not None:
x = torch.addmm(
self.bias.type_as(x), x.contiguous().view(-1, x.size(-1)), self.weight.type_as(x)
)
else:
x = torch.mm(x.contiguous().view(-1, x.size(-1)), self.weight.type_as(x))
x = x.view(*size_out)
return x