TensorFlow - Perceptron jednowarstwowy

Aby zrozumieć perceptron jednowarstwowy, ważne jest, aby zrozumieć sztuczne sieci neuronowe (SSN). Sztuczne sieci neuronowe to system przetwarzania informacji, którego mechanizm jest inspirowany funkcjonalnością biologicznych obwodów neuronowych. Sztuczna sieć neuronowa zawiera wiele połączonych ze sobą jednostek przetwarzających. Poniżej znajduje się schematyczne przedstawienie sztucznej sieci neuronowej -

Diagram pokazuje, że ukryte jednostki komunikują się z warstwą zewnętrzną. Podczas gdy jednostki wejściowe i wyjściowe komunikują się tylko przez ukrytą warstwę sieci.

Wzorzec połączenia z węzłami, całkowita liczba warstw i poziom węzłów między wejściami i wyjściami wraz z liczbą neuronów na warstwę określają architekturę sieci neuronowej.

Istnieją dwa rodzaje architektury. Te typy koncentrują się na funkcjonalności sztucznych sieci neuronowych w następujący sposób -

  • Perceptron jednowarstwowy
  • Perceptron wielowarstwowy

Perceptron jednowarstwowy

Perceptron jednowarstwowy jest pierwszym zaproponowanym modelem neuronowym. Zawartość lokalnej pamięci neuronu składa się z wektora wag. Obliczenia perceptronu jednowarstwowego przeprowadza się poprzez obliczenie sumy wektora wejściowego, z których każdy ma wartość pomnożoną przez odpowiedni element wektora wag. Wartość wyświetlana na wyjściu będzie wartością wejściową funkcji aktywacji.

Skoncentrujmy się na implementacji perceptronu jednowarstwowego do problemu klasyfikacji obrazu przy użyciu TensorFlow. Najlepszym przykładem ilustrującym perceptron jednowarstwowy jest przedstawienie „regresji logistycznej”.

Rozważmy teraz następujące podstawowe kroki treningu regresji logistycznej -

  • Na początku treningu wagi są inicjowane losowymi wartościami.

  • Dla każdego elementu zbioru uczącego błąd jest obliczany z różnicy między pożądanym wyjściem a rzeczywistym wyjściem. Obliczony błąd służy do korygowania wag.

  • Proces jest powtarzany, aż błąd popełniony na całym zbiorze uczącym nie będzie mniejszy niż określony próg, aż do osiągnięcia maksymalnej liczby iteracji.

Pełny kod do oceny regresji logistycznej jest wymieniony poniżej -

# Import MINST data 
from tensorflow.examples.tutorials.mnist import input_data 
mnist = input_data.read_data_sets("/tmp/data/", one_hot = True) 

import tensorflow as tf 
import matplotlib.pyplot as plt 

# Parameters 
learning_rate = 0.01 
training_epochs = 25 
batch_size = 100 
display_step = 1 

# tf Graph Input 
x = tf.placeholder("float", [None, 784]) # mnist data image of shape 28*28 = 784 
y = tf.placeholder("float", [None, 10]) # 0-9 digits recognition => 10 classes 

# Create model 
# Set model weights 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 

# Construct model 
activation = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax 

# Minimize error using cross entropy 
cross_entropy = y*tf.log(activation) 
cost = tf.reduce_mean\ (-tf.reduce_sum\ (cross_entropy,reduction_indices = 1)) 

optimizer = tf.train.\ GradientDescentOptimizer(learning_rate).minimize(cost) 

#Plot settings 
avg_set = [] 
epoch_set = [] 

# Initializing the variables init = tf.initialize_all_variables()
# 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_xs, batch_ys = \ mnist.train.next_batch(batch_size)
         # Fit training using batch data sess.run(optimizer, \ feed_dict = {
            x: batch_xs, y: batch_ys}) 
         # Compute average loss avg_cost += sess.run(cost, \ feed_dict = {
            x: batch_xs, \ y: batch_ys})/total_batch
      # Display logs per epoch step
      if epoch % display_step == 0:
         print ("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost))
            avg_set.append(avg_cost) epoch_set.append(epoch+1)
   print ("Training phase finished")
    
   plt.plot(epoch_set,avg_set, 'o', label = 'Logistic Regression Training phase') 
   plt.ylabel('cost') 
   plt.xlabel('epoch') 
   plt.legend() 
   plt.show() 
    
   # Test model 
   correct_prediction = tf.equal(tf.argmax(activation, 1), tf.argmax(y, 1)) 
   
   # Calculate accuracy 
   accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print 
      ("Model accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))

Wynik

Powyższy kod generuje następujące dane wyjściowe -

Regresja logistyczna jest uważana za analizę predykcyjną. Regresja logistyczna służy do opisu danych i wyjaśnienia związku między jedną zależną zmienną binarną a jedną lub większą liczbą zmiennych nominalnych lub niezależnych.