|
@@ -15,8 +15,7 @@ from watermark_codec.tool.tensor_deal import flatten_parameters, save_tensor, ge
|
|
|
|
|
|
|
|
|
class ModelEncoder:
|
|
|
- def __init__(self, layers: List[nn.Conv2d], secret: str, key_path: str = None, device='cuda'):
|
|
|
- self.device = device
|
|
|
+ def __init__(self, layers: List[nn.Conv2d], secret: str, key_path: str = None):
|
|
|
self.layers = layers
|
|
|
|
|
|
# 处理待嵌入的卷积层
|
|
@@ -25,7 +24,6 @@ class ModelEncoder:
|
|
|
raise TypeError('传入参数不是卷积层')
|
|
|
weights = [x.weight for x in layers]
|
|
|
w = flatten_parameters(weights)
|
|
|
- w_init = w.clone().detach()
|
|
|
print('Size of embedding parameters:', w.shape)
|
|
|
|
|
|
# 对密钥进行处理
|
|
@@ -34,7 +32,7 @@ class ModelEncoder:
|
|
|
print(f'Secret:{self.secret} secret length:{self.secret_len}')
|
|
|
|
|
|
# 生成随机的投影矩阵
|
|
|
- self.X_random = ms.ops.randn((self.secret_len, w_init.shape[0]))
|
|
|
+ self.X_random = ms.ops.randn((self.secret_len, w.shape[0]))
|
|
|
save_tensor(self.X_random, key_path) # 保存投影矩阵至指定位置
|
|
|
|
|
|
def get_loss(self, loss, alpha=1):
|