Создание перцептрона, использующего шифрование Пайе, TypeError: не знаю точности типа <class 'numpy.ndarray'>
Я пытаюсь создать простой однослойный перцептрон с использованием шифрования Пайе, чтобы входные данные можно было отправлять в зашифрованном виде от клиента к серверу, а затем сервер мог запускать перцептрон над ним и отправлять обратно зашифрованный вывод. Теперь этот вывод может быть расшифрован клиентом и передан функции активации.
Следующий питон направлен на достижение этого, но в нем много упрощений и допущений для вышеупомянутого случая.
class ModPerceptron(object):
def __init__(self, no_of_inputs, threshold=100, learning_rate=0.01):
self.threshold = threshold
self.learning_rate = learning_rate
# the following array also contains the bias
self.weights = np.zeros(no_of_inputs + 1)
def predict(self, inputs, public_key, private_key):
#inpcut will be encrypted
# now summation is different
summation = public_key.encrypt(self.weights[0])*np.sum(np.power( public_key.encrypt(inputs), self.weights[1:]))
#time to decrypt the summation
summation = private_key.decrypt(summation)
if summation > 0:
activation = 1
else:
activation = 0
return activation
def train(self, training_inputs, labels, public_key, private_key):
for _ in range(self.threshold):
for inputs, label in zip(training_inputs, labels):
prediction = self.predict(inputs, public_key, private_key)
self.weights[1:] += self.learning_rate * (label - prediction) * inputs
self.weights[0] += self.learning_rate * (label - prediction)
public_key, private_key = paillier.generate_paillier_keypair()
perceptron = ModPerceptron(4)
perceptron.train(data[:,0:4], data[:,-1], public_key, private_key)
#training complete
#now lets predict
y_pred = []
for inputs in data[:,0:4]:
y_pred.append(perceptron.predict(inputs, public_key, private_key))
print(perceptron.predict(inputs, public_key, private_key))
from sklearn.metrics import accuracy_score
accuracy_score(data[:,-1], y_pred)
Однако это вызывает ошибку typeError -
TypeError: Don't know the precision of type <class 'numpy.ndarray'>.
Помимо этого, я думаю, что может быть проблема и с моим подходом. Я использую эту функцию для расчета зашифрованного вывода, когда у меня есть доступ только к зашифрованным входам и смещению.
Как я могу решить эту ошибку, и если мой подход к решению этой проблемы неправильный, как мне действовать?