Spaces:
Sleeping
Sleeping
from torch import nn | |
import torch | |
def init_skim_predictor(module_list, mean_bias=5.0): | |
for module in module_list: | |
if not isinstance(module, torch.nn.Linear): | |
raise ValueError("only support initialization of linear skim predictor") | |
# module.bias.data[1].fill_(5.0) | |
# module.bias.data[0].fill_(-5.0) | |
# module.weight.data.zero_() | |
module.bias.data[1].normal_(mean=mean_bias, std=0.02) | |
module.bias.data[0].normal_(mean=-mean_bias, std=0.02) | |
module.weight.data.normal_(mean=0.0, std=0.02) | |
module._skim_initialized = True | |
class SkimPredictor(nn.Module): | |
def __init__(self, input_size, output_size, hidden_size=None): | |
super().__init__() | |
self.hidden_size = hidden_size if hidden_size else input_size | |
self.predictor = nn.Sequential( | |
nn.LayerNorm(input_size), | |
nn.Linear(input_size, self.hidden_size), | |
# nn.GELU(), | |
# nn.Linear(self.hidden_size, self.hidden_size), | |
nn.LayerNorm(self.hidden_size), | |
nn.GELU(), | |
nn.Linear(self.hidden_size, output_size), | |
) | |
init_skim_predictor([self.predictor[-1]]) | |
def forward(self, hidden_states): | |
return self.predictor(hidden_states) | |
def test_init_skim_predictor(): | |
num_layers = 12 | |
skim_predictors = torch.nn.ModuleList([torch.nn.Linear(768,2) for _ in range(num_layers)]) | |
init_skim_predictor(skim_predictors) | |
print(skim_predictors[0].weight, skim_predictors[0].bias) | |
rand_input = torch.rand((4, 16, 768)) | |
print(skim_predictors[0](rand_input)) | |
if __name__ == "__main__": | |
test_init_skim_predictor() |