tensorflow实例-多层感知器

xiaoxiao2021-02-27  287

一、概念  

感知器:

  上图就是基本的处理元素,它具有输入、输出,每个输入关联一个连接权重,然后输出是输入的加权和。

上图就是一个单层的感知器,输入分别是X0、X1、X2,输出Y是输入的加权和:

Y = W0X0 + W1X1 + W2X2。

  在实际的使用中,我们的主要任务就是通过数据训练确定参数权重。在训练神经网络时,如果未提供全部样本而是逐个提供实例,则我们通常使用在线学习,然后在每个实例学习之后立刻调整网络参数,以这种方式使得网络缓慢得以及时调整。具体收敛可以使用梯度下降算法。

  感知器具有很强的表现力,比如布尔函数AND和OR都可以使用上面的单层感知器实现。但是对于XOR操作则不行,因为单层感知器只能模拟线性函数,我们需要运用多层感知器。单层感知器只能对线性可分的集合进行分类,而多层感知器可以模拟任意复杂的函数,其中函数的复杂性取决于网络输入个数和隐层个数。

多层感知器:

二维平面上不存在一条直线,将输入模式分为两类,此输入模式成线性不可分集合。 可知:单层感知器不能解决异或问题。   对于XOR这种非线性函数的模拟,我们需要采用多层感知器,即在最初的输入和输出层之间隐藏着一到多个层。 多层感知器(Multiayer perceptrons,MLP),可以实现非线性判别式,如果用于回归,可以逼近输入的非线性函数。其实MLP可以用于“普适近似”,即可以证明:具有连续输入和输出的任何函数都可以用MLP近似。已经证明,具有一个隐藏层(隐藏节点个数不限)的MLP可以学习输入的任意非线性函数。

二、tensorflow代码

import tensorflow as tf # Import MNIST data from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) # Parameters learning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1 # Network Parameters n_hidden_1 = 256 # 1st layer number of features n_hidden_2 = 256 # 2nd layer number of features n_input = 784 # MNIST data input (img shape: 28*28) n_classes = 10 # MNIST total classes (0-9 digits) # tf Graph input x = tf.placeholder("float", [None, n_input]) y = tf.placeholder("float", [None, n_classes]) # Create model def multilayer_perceptron(x, weights, biases):     # Hidden layer with RELU activation     layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])     layer_1 = tf.nn.relu(layer_1)     # Hidden layer with RELU activation     layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])     layer_2 = tf.nn.relu(layer_2)     # Output layer with linear activation     out_layer = tf.matmul(layer_2, weights['out']) + biases['out']     return out_layer # Store layers weight & bias weights = {     'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),     'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),     'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes])) } biases = {     'b1': tf.Variable(tf.random_normal([n_hidden_1])),     'b2': tf.Variable(tf.random_normal([n_hidden_2])),     'out': tf.Variable(tf.random_normal([n_classes])) } # Construct model pred = multilayer_perceptron(x, weights, biases) # Define loss and optimizer cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) # Initializing the variables init = tf.global_variables_initializer() # Launch the graph with tf.Session() as sess:     sess.run(init)     # Training cycle     for epoch in range(training_epochs):         avg_cost = 0.         total_batch = int(mnist.train.num_examples/batch_size)         # Loop over all batches         for i in range(total_batch):             batch_x, batch_y = mnist.train.next_batch(batch_size)             # Run optimization op (backprop) and cost op (to get loss value)             _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,  y: batch_y})             # Compute average loss             avg_cost += c / total_batch         # Display logs per epoch step         if epoch % display_step == 0:             print("Epoch:", 'd' % (epoch+1), "cost=", \                 "{:.9f}".format(avg_cost))     print("Optimization Finished!")     # Test model     correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))     # Calculate accuracy     accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))     print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))
转载请注明原文地址: https://www.6miu.com/read-3290.html

最新回复(0)