Скорость обучения, не имеющая изображения скорости схождения? - PullRequest
1 голос
/ 28 марта 2020

Реализуя поведение шлюза NAND с помощью персептрона Розенблатта, я тестировал влияние изменения скорости обучения и того, сколько эпох на самом деле должно сойтись. Но изменение значения не оказало влияния, и алгоритм всегда сходился после 5 эпох.

Это моя реализация:

import numpy as np
import matplotlib.pyplot as plt

n_inputs = 2
epochs = 10 # the loop is written to break once the algorithm converged so this represents max epochs

#binary inputs
training_inputs = np.array([[1,0,0],[1,0,1],[1,1,0],[1,1,1]])

#bipolar inputs
#training_inputs = np.array([[1,-1,-1],[1,-1,1],[1,1,-1],[1,1,1]])

d = np.array([1,1,1,-1])
l_rate = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]

for learning_rate in l_rate:
    print('\n====================================\n')
    print('Learning Rate: ',learning_rate)

    w = np.zeros(n_inputs+1)
    previous_w = np.zeros(n_inputs+1)
    conv_epoch = 0

    for i in range(epochs):
        for inputs, targets in zip(training_inputs, d):
            v_i = np.dot(inputs,w)
            if v_i > 0:
                y_i = 1
            elif v_i == 0:
                y_i = 0
            elif v_i < 0:
                y_i = -1
            w = w + learning_rate*(targets - y_i)*inputs


        #logging the weights after each epoch and comparing it to the previous epoch's weights
        print('------------------------')
        print('end of epoch: ',i+1)
        print('weights: ', w)
        print('previous weights: ', previous_w)
        conv = np.array_equal(previous_w, w) #compare to previous epoch's weights to check for convergence
        print('Converged: ',conv)
        if(conv):
            if (conv_epoch==0):
                conv_epoch = i #it converged at the previous epoch
            print('weights: ', w)
            print('Converged at epoch: ',conv_epoch)
            print('------------------------')
            break #after it converged no need to continue with the remaining epochs
        print('------------------------')
        print()
        previous_w = w

это влияет на характер входов -1 и 1 или что-то не так с моим кодом. Я тестирую его как с двоичными, так и с биполярными входами.

...