Я пробовал код алгоритма обратного распространения, который видел на inte rnet, но после запуска кода я обнаружил обратную трассировку, которую не понял. Можете ли вы, ребята, помочь мне улучшить и понять возникшую трассировку
А вот фрагмент моего кода, который часто вызывает ошибки:
from random import seed
from random import randrange
from random import random
from csv import reader
from math import exp
def evaluate_algorithm(dataset, algorithm, n_folds, *args):
folds = cross_validation_split(dataset, n_folds)
scores = list()
for fold in folds:
train_set = list(folds)
train_set.remove(fold)
train_set = sum(train_set, [])
test_set = list()
for row in fold:
row_copy = list(row)
test_set.append(row_copy)
row_copy[-1] = None
predicted = algorithm(train_set, test_set, *args)
actual = [row[-1] for row in fold]
accuracy = accuracy_metric(actual, predicted)
scores.append(accuracy)
return scores
def train_network(network, train, l_rate, n_epoch, n_outputs):
for epoch in range(n_epoch):
for row in train:
outputs = forward_propagate(network, row)
expected = [0 for i in range(n_outputs)]
expected[row[-1]] = 1
backward_propagate_error(network, expected)
update_weights(network, row, l_rate)
def back_propagation(train, test, l_rate, n_epoch, n_hidden):
n_inputs = len(train[0]) - 1
n_outputs = len(set([row[-1] for row in train]))
network = initialize_network(n_inputs, n_hidden, n_outputs)
train_network(network, train, l_rate, n_epoch, n_outputs)
predictions = list()
for row in test:
prediction = predict(network, row)
predictions.append(prediction)
return(predictions)
n_folds = 5
l_rate = 0.3
n_epoch = 500
n_hidden = 5
scores = evaluate_algorithm(dataset, back_propagation, n_folds, l_rate, n_epoch, n_hidden)
print('Scores: %s' % scores)
И ниже ошибка, которая появляется после запуска мой код:
Traceback (most recent call last):
- line 197, in <module>
scores = evaluate_algorithm(dataset, back_propagation, n_folds, l_rate, n_epoch, n_hidden)
- line 81, in evaluate_algorithm
predicted = algorithm(train_set, test_set, *args)
- line 173, in back_propagation
train_network(network, train, l_rate, n_epoch, n_outputs)
- line 150, in train_network
expected[row[-1]] = 1
IndexError: list assignment index out of range