started unlearning setup
This commit is contained in:
29
unlearning/LinearFiltration.py
Normal file
29
unlearning/LinearFiltration.py
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
import torch
|
||||
from Strategy import Strategy
|
||||
|
||||
class NormalizingLinearFiltration(Strategy):
|
||||
def __init__(self, target_class_idx):
|
||||
self.target_class_idx = target_class_idx
|
||||
|
||||
def apply(self, model, forget_loader, retain_loader):
|
||||
model.eval()
|
||||
# Freeze parameters structurally
|
||||
for param in model.parameters():
|
||||
param.requires_grad = False
|
||||
|
||||
with torch.no_grad():
|
||||
# we modify only classification head
|
||||
# Shape: [num_classes, feature_dim]
|
||||
W = model.fc.weight.data
|
||||
|
||||
# Compute the normalization transformation projection matrix (A)
|
||||
# (In your full code, calculate A here matching Baumhauer et al.'s equations)
|
||||
num_classes = W.shape[0]
|
||||
A = torch.eye(num_classes, device=W.device)
|
||||
# Mask/blend target class index distribution configurations here...
|
||||
A[self.target_class_idx, :] = 0.0
|
||||
|
||||
# 3. Direct weight matrix override: W_filtered = A * W
|
||||
sanitized_W = torch.mm(A, W)
|
||||
model.fc.weight.copy_(sanitized_W)
|
||||
Reference in New Issue
Block a user