TensorFlow-XOR 구현

이 장에서는 TensorFlow를 사용한 XOR 구현에 대해 알아 봅니다. TensorFlow에서 XOR 구현을 시작하기 전에 XOR 테이블 값을 살펴 보겠습니다. 이는 암호화 및 복호화 프로세스를 이해하는 데 도움이됩니다.

XOR
0 0 0
0 1 1
1 0 1
1 1 0

XOR Cipher 암호화 방식은 기본적으로 무차별 대입 방식으로 크래킹하기 어려운 데이터를 암호화하는 데 사용됩니다. 즉, 적절한 키와 일치하는 임의의 암호화 키를 생성합니다.

XOR Cipher를 사용한 구현 개념은 XOR 암호화 키를 정의한 다음 사용자가 암호화를 시도하는이 키를 사용하여 지정된 문자열의 문자에 대해 XOR 연산을 수행하는 것입니다. 이제 우리는 아래에 언급 된 TensorFlow를 사용한 XOR 구현에 초점을 맞출 것입니다.

#Declaring necessary modules
import tensorflow as tf
import numpy as np
"""
A simple numpy implementation of a XOR gate to understand the backpropagation
algorithm
"""

x = tf.placeholder(tf.float64,shape = [4,2],name = "x")
#declaring a place holder for input x
y = tf.placeholder(tf.float64,shape = [4,1],name = "y")
#declaring a place holder for desired output y

m = np.shape(x)[0]#number of training examples
n = np.shape(x)[1]#number of features
hidden_s = 2 #number of nodes in the hidden layer
l_r = 1#learning rate initialization

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)

#conducting forward propagation
a1 = tf.concat([np.c_[np.ones(x.shape[0])],x],1)
#the weights of the first layer are multiplied by the input of the first layer

z1 = tf.matmul(a1,theta1)
#the input of the second layer is the output of the first layer, passed through the 
   activation function and column of biases is added

a2 = tf.concat([np.c_[np.ones(x.shape[0])],tf.sigmoid(z1)],1)
#the input of the second layer is multiplied by the weights

z3 = tf.matmul(a2,theta2)
#the output is passed through the activation function to obtain the final probability

h3 = tf.sigmoid(z3)
cost_func = -tf.reduce_sum(y*tf.log(h3)+(1-y)*tf.log(1-h3),axis = 1)

#built in tensorflow optimizer that conducts gradient descent using specified 
   learning rate to obtain theta values

optimiser = tf.train.GradientDescentOptimizer(learning_rate = l_r).minimize(cost_func)

#setting required X and Y values to perform XOR operation
X = [[0,0],[0,1],[1,0],[1,1]]
Y = [[0],[1],[1],[0]]

#initializing all variables, creating a session and running a tensorflow session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

#running gradient descent for each iteration and printing the hypothesis 
   obtained using the updated theta values
for i in range(100000):
   sess.run(optimiser, feed_dict = {x:X,y:Y})#setting place holder values using feed_dict
   if i%100==0:
      print("Epoch:",i)
      print("Hyp:",sess.run(h3,feed_dict = {x:X,y:Y}))

위의 코드 줄은 아래 스크린 샷과 같이 출력을 생성합니다.