Skip to content

Instantly share code, notes, and snippets.

View youben11's full-sized avatar
🏠
Working from home

Ayoub Benaissa youben11

🏠
Working from home
View GitHub Profile
import hnumpy as hnp
import numpy as np
weights = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
bias = np.array([0.1])
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def func(x):
return sigmoid(np.dot(x, weights) + bias)
h = hnp.compile_fhe(
func,
{
'x': hnp.encrypted_ndarray(bounds=(-1, 1), shape=(5,)),
}
)
x = np.random.uniform(-1, 1, 5)
print(f"Simulation result: {h.simulate(x)}")
print(f"Plain NumPy result: {func(x)}")
ctx = h.create_context()
keys = ctx.keygen()
print(f"Encrypted computation result: {h.encrypt_and_run(keys, x)}")
x_enc= keys.encrypt(x)
res = h.run(keys.public_keys, x_enc)
print(f"Encrypted computation result: {keys.decrypt(res)}")
HIDDEN_SIZE = 100
class Model(torch.nn.Module):
def __init__(self):
super().__init__()
self.lstm = torch.nn.LSTM(input_size=300, hidden_size=HIDDEN_SIZE)
self.fc = torch.nn.Linear(HIDDEN_SIZE, 1)
self.sigmoid = torch.nn.Sigmoid()
class Inferer:
def __init__(self, model):
parameters = list(model.lstm.parameters())
W_ii, W_if, W_ig, W_io = parameters[0].split(HIDDEN_SIZE)
W_hi, W_hf, W_hg, W_ho = parameters[1].split(HIDDEN_SIZE)
b_ii, b_if, b_ig, b_io = parameters[2].split(HIDDEN_SIZE)
b_hi, b_hf, b_hg, b_ho = parameters[3].split(HIDDEN_SIZE)
self.W_ii = W_ii.detach().numpy()