tf_watermark_utils.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import numpy as np
  2. from tf_watermark.tf_watermark_regularizers import WatermarkRegularizer
  3. RESULT_PATH = './result'
  4. fname_x = RESULT_PATH + '/x.npy' # 投影矩阵
  5. fname_b = RESULT_PATH + '/b.npy' # 密钥
  6. def get_wmark_regularizers(model):
  7. ret = []
  8. for i, layer in enumerate(model.layers):
  9. if hasattr(layer, "kernel_regularizer"):
  10. regularizer = layer.kernel_regularizer
  11. if isinstance(regularizer, WatermarkRegularizer):
  12. ret.append((i, regularizer))
  13. return ret
  14. # 保存水印签名的函数
  15. def save_wmark_signatures(model):
  16. for layer_id, wmark_regularizer in get_wmark_regularizers(model):
  17. np.save(fname_x, wmark_regularizer.get_matrix())
  18. np.save(fname_b, wmark_regularizer.get_signature())
  19. def save_wmark_signatures_by_layer(layer):
  20. wmark_regularizer = layer.kernel_regularizer
  21. np.save(fname_x, wmark_regularizer.get_matrix())
  22. np.save(fname_b, wmark_regularizer.get_signature())
  23. # 获取指定层权重和密钥预测值
  24. def get_layer_weights_and_predicted(target_layer):
  25. x = np.load(fname_x)
  26. # get signature from model layer and matrix
  27. layer_weights = target_layer.get_weights()
  28. weight = (np.array(layer_weights[0])).mean(axis=3)
  29. pred_bparam = np.dot(weight.reshape(1, weight.size), x) # dot product
  30. pred_bparam = np.where(pred_bparam >= 0, 1, 0)
  31. return layer_weights[0], pred_bparam