Создание перцептрона, использующего шифрование Пайе, 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'>.

Помимо этого, я думаю, что может быть проблема и с моим подходом. Я использую эту функцию для расчета зашифрованного вывода, когда у меня есть доступ только к зашифрованным входам и смещению.

Это уравнение

Как я могу решить эту ошибку, и если мой подход к решению этой проблемы неправильный, как мне действовать?

0 ответов

Другие вопросы по тегам