Как определить количество эпох, необходимое для сходимости алгоритма персептрона (Python) - PullRequest
0 голосов
/ 22 марта 2020

Я делаю однослойный персептрон в Python, и я застрял в том, как определить, по какому индексу эпохи сходится алгоритм.

Это мой код:

    # Make a prediction with weights
def predict(row, weights):
    activation = weights[0]
    try:
        for i in range(len(row)-1):
            activation += weights[i + 1] * float(row[i])
    except:
        print(type(row))    
    return 1 if activation >= 0.0 else -1

# Estimate Perceptron weights using stochastic gradient descent
def train_weights(train, l_rate, n_epoch):
    weights = [0.0 for i in range(len(train))]
    for epoch in range(n_epoch):
        for index, row in train.itertuples():
            rows=row.split()
            type(rows)
            prediction = predict(rows, weights)
            error = float(rows[-1]) - prediction
            weights[0] = weights[0] + l_rate * error
            for i in range(len(rows)-1):
                weights[i + 1] = weights[i + 1] + l_rate * error * float(rows[i])
    return weights

# Perceptron Algorithm With Stochastic Gradient Descent
def perceptron(train, test, l_rate, n_epoch):
    predictions = list()
    weights = train_weights(train, l_rate, n_epoch)
    for index, row in test.itertuples():
        rows=row.split()
        prediction = predict(rows, weights)
        predictions.append(prediction)
    return predictions

Мое предположение: очевидно, что сходимость означает, что ошибка настолько мала, но я не знаю, где разместить условие, например, может ли ошибка стать действительно маленькой, тогда go вверх? главная проблема - нахождение эпохи с наименьшим уровнем ошибок

...