Spaces:
Build error
Build error
File size: 1,425 Bytes
9206300 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import numpy as np
import torch
def print_arch(model, model_name='model'):
print(f"| {model_name} Arch: ", model)
num_params(model, model_name=model_name)
def num_params(model, print_out=True, model_name="model"):
parameters = filter(lambda p: p.requires_grad, model.parameters())
parameters = sum([np.prod(p.size()) for p in parameters]) / 1_000_000
if print_out:
print(f'| {model_name} Trainable Parameters: %.3fM' % parameters)
return parameters
def requires_grad(model):
if isinstance(model, torch.nn.Module):
for p in model.parameters():
p.requires_grad = True
else:
model.requires_grad = True
def not_requires_grad(model):
if isinstance(model, torch.nn.Module):
for p in model.parameters():
p.requires_grad = False
else:
model.requires_grad = False
def get_grad_norm(model, l=2):
num_para = 0
accu_grad = 0
if isinstance(model, torch.nn.Module):
params = model.parameters()
else:
params = model
for p in params:
if p.grad is None:
continue
num_para += p.numel()
if l == 1:
accu_grad += p.grad.abs(1).sum()
elif l == 2:
accu_grad += p.grad.pow(2).sum()
else:
raise ValueError("Now we only implement l1/l2 norm !")
if l == 2:
accu_grad = accu_grad ** 0.5
return accu_grad |