Tensorflow实现与门感知机

    xiaoxiao2021-03-25  53

    感知机是最简单的神经网络,通过输入,进行加权处理,经过刺激函数,得到输出。通过输出计算误差,调整权重,最终,得到合适的加权函数。

    今天,我通过tensorflow实现简单的感知机。

    首先,初始化变量:

        num_nodes = 2     output_units = 1     w = tf.Variable(tf.truncated_normal([num_nodes,output_units], -0.1, 0.1))     b = tf.Variable(tf.truncated_normal([output_units],0.1))     x = tf.placeholder(tf.float32, shape = [None, num_nodes])     y = tf.placeholder(tf.float32, shape = [None,output_units])

    计算输出,同时设置损失函数与优化损失,这里采用sigmoid函数,可以将经过加权函数的输出归为0到1之间。采用均方差作为损失函数,如果采用交叉熵函数,交叉熵损失函数主要用于多输出的,不太合适。

        output = tf.sigmoid(tf.matmul(x,w) + b)     cross_entropy = tf.reduce_mean(tf.square(output - y))     train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

    输入训练数据进行训练,运行1000次。

     sess = tf.Session()  sess.run(tf.global_variables_initializer())  train_x = [[1.0,1.0],[0.0,0.0],[1.0,0.0],[0.0,1.0]]  train_y = [[1.0],[0.0],[0.],[0.]]  for i in range(1000):        sess.run([train_step], feed_dict={x:train_x,y:train_y})

    进行预测:

    test_x = [[0.0,1.0],[0.0,0.0],[1.0,1.0],[1.0,0.0]] print(sess.run(output, feed_dict={x:test_x}))

    输出结果为[0.11,0.03,0.85,0.11],接近于[0,0,1,0]

    与门感知机的实现主要是损失函数,学习率的调整,方能得到不错的结果。输入或门的数据,同样可以获得或门的模型。感知机由于无法处理非线性问题,所以无法实现异或门。

    代码地址: https://github.com/summersunshine1/datamining/tree/master/perceptron

    转载请注明原文地址: https://ju.6miu.com/read-36852.html

    最新回复(0)