123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import numpy as np
- from tf_watermark.tf_watermark_regularizers import WatermarkRegularizer
- RESULT_PATH = './result'
- fname_x = RESULT_PATH + '/x.npy' # 投影矩阵
- fname_b = RESULT_PATH + '/b.npy' # 密钥
- def get_wmark_regularizers(model):
- ret = []
- for i, layer in enumerate(model.layers):
- if hasattr(layer, "kernel_regularizer"):
- regularizer = layer.kernel_regularizer
- if isinstance(regularizer, WatermarkRegularizer):
- ret.append((i, regularizer))
- return ret
- # 保存水印签名的函数
- def save_wmark_signatures(model):
- for layer_id, wmark_regularizer in get_wmark_regularizers(model):
- np.save(fname_x, wmark_regularizer.get_matrix())
- np.save(fname_b, wmark_regularizer.get_signature())
- def save_wmark_signatures_by_layer(layer):
- wmark_regularizer = layer.kernel_regularizer
- np.save(fname_x, wmark_regularizer.get_matrix())
- np.save(fname_b, wmark_regularizer.get_signature())
- # 获取指定层权重和密钥预测值
- def get_layer_weights_and_predicted(target_layer):
- x = np.load(fname_x)
- # get signature from model layer and matrix
- layer_weights = target_layer.get_weights()
- weight = (np.array(layer_weights[0])).mean(axis=3)
- pred_bparam = np.dot(weight.reshape(1, weight.size), x) # dot product
- pred_bparam = np.where(pred_bparam >= 0, 1, 0)
- return layer_weights[0], pred_bparam
|