TensorFlow - XOR 实现

  • 简述

    在本章中,我们将了解使用 TensorFlow 的 XOR 实现。在开始在 TensorFlow 中实现 XOR 之前,让我们看看 XOR 表的值。这将有助于我们了解加密和解密过程。
    A B A XOR B
    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}))
    
    上面的代码行生成一个输出,如下面的屏幕截图所示 -
    使用 TensorFlow 的 XOR 实现