TensorFlow - Triển khai XOR

Trong chương này, chúng ta sẽ tìm hiểu về việc triển khai XOR bằng TensorFlow. Trước khi bắt đầu triển khai XOR trong TensorFlow, chúng ta hãy xem các giá trị bảng XOR. Điều này sẽ giúp chúng tôi hiểu quá trình mã hóa và giải mã.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Phương pháp mã hóa XOR Cipher về cơ bản được sử dụng để mã hóa dữ liệu khó bị bẻ khóa bằng phương pháp brute force, tức là bằng cách tạo các khóa mã hóa ngẫu nhiên khớp với khóa thích hợp.

Khái niệm triển khai với XOR Cipher là xác định khóa mã hóa XOR và sau đó thực hiện thao tác XOR của các ký tự trong chuỗi được chỉ định với khóa này mà người dùng cố gắng mã hóa. Bây giờ chúng ta sẽ tập trung vào việc triển khai XOR bằng cách sử dụng TensorFlow, được đề cập bên dưới:

#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}))

Dòng mã trên tạo ra một đầu ra như được hiển thị trong ảnh chụp màn hình bên dưới -