В этой главе мы узнаем о реализации XOR с использованием TensorFlow. Прежде чем начать с реализации XOR в TensorFlow, давайте посмотрим значения таблицы XOR. Это поможет нам понять процесс шифрования и дешифрования.
A | В | A XOR B |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Метод шифрования XOR в основном используется для шифрования данных, которые трудно взломать методом грубой силы, т. е. путем генерации случайных ключей шифрования, которые соответствуют соответствующему ключу.
Концепция реализации с XOR Cipher состоит в том, чтобы определить ключ шифрования XOR и затем выполнить операцию XOR символов в указанной строке с этим ключом, который пользователь пытается зашифровать. Теперь мы сосредоточимся на реализации XOR с использованием TensorFlow, которая упоминается ниже:
#Объявление необходимых модулей import tensorflow as tf import numpy as np """ Простая реализация NumPy Схема исключающее или понять алгоритм обратного распространения """ x = tf.placeholder(tf.float64,shape = [4,2],name = "x") #объявления держатель для входного сигнала х y = tf.placeholder(tf.float64,shape = [4,1],name = "y") #объявление заполнителя для желаемого вывода y m = np.shape(x)[0]#количество примеров обучения n = np.shape(x)[1]#количество функций hidden_s = 2 #количество узлов в скрытом слое l_r = 1#инициализация скорости обучения theta1 = tf.cast(tf.Variable(tf.random_normal([3,hidden_s]),name = "theta1"),tf.float64) theta2 = tf.cast(tf.Variable(tf.random_normal([hidden_s+1,1]),name = "theta2"),tf.float64) #проведение прямого распространения a1 = tf.concat([np.c_[np.ones(x.shape[0])],x],1) #весы первого слоя умножаются на вход первого слоя z1 = tf.matmul(a1,theta1) #вход второго слоя является выходом первого слоя, пропускается через функцию активации и добавляется столбец смещений a2 = tf.concat([np.c_[np.ones(x.shape[0])],tf.sigmoid(z1)],1) #на вход второго слоя умножается на вес z3 = tf.matmul(a2,theta2) #выход передается через функцию активации для получения конечной вероятности h3 = tf.sigmoid(z3) cost_func = -tf.reduce_sum(y*tf.log(h3)+(1-y)*tf.log(1-h3),axis = 1) #встроенный оптимизатор тензорного потока, который проводит градиентный спуск с использованием заданной скорости обучения для получения тета-значений optimiser = tf.train.GradientDescentOptimizer(learning_rate = l_r).minimize(cost_func) #установка необходимых значений X и Y для выполнения операции XOR X = [[0,0],[0,1],[1,0],[1,1]] Y = [[0],[1],[1],[0]] #инициализация всех переменных, создание сеанса и запуск сеанса tensorflow init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) #запуск градиентного спуска для каждой итерации и печать гипотезы, полученной с использованием обновленных значений тета for i in range(100000): sess.run(optimiser, feed_dict = {x:X,y:Y}) #установка значений держателя места с помощью feed_dict if i%100==0: print("Epoch:",i) print("Hyp:",sess.run(h3,feed_dict = {x:X,y:Y}))
Выше строка кода генерирует вывод, как показано на скриншоте ниже: