[pysyft-007]联邦学习pysyft从入门到精通--对数据进行加密并做运算

import torch
import syft as sy


'''
Part 9 - Intro to Encrypted Programs
http://localhost:8888/notebooks/git-home/github/PySyft/examples/tutorials/Part%2009%20-%20Intro%20to%20Encrypted%20Programs.ipynb
'''

'''
本例展示加密功能
用加密数据训练模型
'''

#pysyft需要hook
hook = sy.TorchHook(torch)

#创建三个工作节点
bob = sy.VirtualWorker(hook, id="bob")
alice = sy.VirtualWorker(hook, id="alice")
bill = sy.VirtualWorker(hook, id="bill")

#加密 加减 计算
def test_add_sub():
    #x是一个常规tensor
    x = torch.tensor([25])

    #在加密共享之前先显示下工作节点上的数据
    print(bob._objects)
    print(alice._objects)
    print(bill._objects)

    #把x在三个工作节点上加密共享,每个节点上都存储一份加密值,注意,三个节点的值要合起来才能得到原值
    encrypted_x = x.share(bob, alice, bill)

    #加密共享后,展示三个工作节点上的数值
    print('bob._objects = ', bob._objects)
    print('alice._object = ', alice._objects)
    print('bill._objects = ', bill._objects)

    #解密显示x的值
    print('encrypted_x.get() = ', encrypted_x.get())


    #演示多节点上加密的减法计算
    x = torch.tensor([25]).share(bob,alice)
    y = torch.tensor([5]).share(bob,alice)
    z = x - y
    print(z.get())

#加密 乘除 计算,耗时略大
def test_multip_divi():
    #乘除计算,需要一个中间提供随机数的provider
    crypto_provider = sy.VirtualWorker(hook, id="crypto_provider")
    x = torch.tensor([25]).share(bob,alice, crypto_provider=crypto_provider)
    y = torch.tensor([5]).share(bob,alice, crypto_provider=crypto_provider)
    z1 = x * y
    z2 = x/y
    print('z1 = ', z1.get())
    print('z2 = ', z2.get())
    

if __name__ == '__main__':
    test_add_sub()
    test_multip_divi()

 

你可能感兴趣的:([pysyft-007]联邦学习pysyft从入门到精通--对数据进行加密并做运算)