test_skim / test_module /modeling_skim_predictor.py
adamtayzzz's picture
Upload 21 files
0e73e91 verified
raw
history blame
1.68 kB
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()